对存储过程熟悉的朋友来帮忙
哪位朋友对存储过程熟悉的来帮我看看,在存储过程里面,有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)