日期:2014-05-16  浏览次数:20931 次

如何动态拼接where以及后面的子句
小弟写了一个存储过程,现在需要进行模糊查询。
传入存储过程的参数有两个。如果两个参数都为 " ",则不拼接where子句如果其中任何一个不为" ",则拼接相应的模糊查询子句
网上看到有说用case when,但没有找到适合我的方法。
求各位大大指导。

附上sql语句:
@AttrInfo,@PosInfo为两个参数

select row_number()OVER(ORDER BY e.UserName DESC) as RowNo, e.UserName, e.InsAdd, e.StartTime, e.CleanTime,
 t.ZTsb, t.ZTfj, t.ZTjhq, t.YouYanND from EquipmentsTest e left join #temp t on e.EquID = t.equid
where e.AttrInfo like @AttrInfoand e.PosInfo like @PosInfo;
------解决方案--------------------
你可以把sql定义为一个变量@sql
然后判断是不是要拼接条件,最后用exec(@sql)执行就行了
------解决方案--------------------
1)如果不想动态拼接 用if elseif else 分支 可能代码多点
2)动态拼接
declare @sql nvarchar(4000)
set @sql='select .... from ... where 1=1 '
+
case when @p1 <>'' then   'col1 like  @p1 +% ' else '' end
+
case when @p2 <>'' then   'col2 like  @p2 +% ' else '' end
exec sp_executesql @sql,N'@p1 datatype,@p2 datatype',@p1,@p2
没环境,就这个思路