日期:2014-05-18  浏览次数:20527 次

对存储过程熟悉的朋友来帮忙
哪位朋友对存储过程熟悉的来帮我看看,在存储过程里面,有2个查询关键字。其中第一个关键字是必须的,用where   a=@str1,后面这个字段是按实际情况添加的,如果传入的参数不为空,就where   a=@str1   and   b=@str2,因为str2是多个条件组合成的,所以我要把   “   and   b=@str2”   作为一个参数传进来。如果参数2为空就是“where   a=@str1”的格式。该怎么写语句呢?

解释一下参数2。我有十几二十个checkbox选项,每个选项对应一个值,我要搜索出某个字段里头包含这些值的所有记录。我现在用组合语句   (where   x   like   '%a% '   or   x   like   '%b% '   or   x   like   '%c% '......)   ,所以我想在外面组合好了,然后传进去。此外我觉得这样的查询语句效率有问题,哪位朋友有更好的解决办法?

------解决方案--------------------
--用动态SQL,类似:

create proc sp_test (@p1 varchar(10),@p2 varchar(10),@p3 varchar(20))
as

declare @sql varchar(100)

set @sql = 'select * from 表名 where 1=1 '

if @p1 is not null
set @sql = @sql + ' and f1 = ' + @p1

if @p2 is not null
set @sql = @sql + ' and f2 = ' + @p2

if @p3 is not null
set @sql = @sql + ' and f3 = ' + @p3


--....


exec (@sql)



------解决方案--------------------
CREATE PROCEDURE PROTEST
@str1 VARCHAR(20),
@str2 VARCHAR(20)=NULL
AS
SELECT * FROM TB WHERE COL1=@str1 AND COL2=ISNULL(@str2,COL2)