如何动态拼接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
没环境,就这个思路