我需要根据传递给存储过程的参数构建一个WHERE
子句。
例如:如果param1
值为1则执行类似条件
@param1 like '%'+ product.Status + '%'
否则我想忽略类似的条件,它会返回所有行....
我如何在WHERE
条款中执行此操作?谢谢,
答案 0 :(得分:2)
@ param1喜欢ISNULL('%'+ product.Status +'%','%')
答案 1 :(得分:1)
您必须使用IF
条件。尝试这样的事情。
if @param1 = 1
Begin
select * from tableName WHERE columnName like '%'+ product.Status + '%'
End
else
Begin
select * from tableName WHERE columnName
End
答案 2 :(得分:0)
所以你需要根据参数改变where子句。使用sp_executesql:您可以将查询构建为字符串,因此如果@param = 1,您可以添加where子句:
declare @sql varchar(1024)
declare @where varchar(1024)
set @sql = N'SELECT field1, field2, field3 FROM myTable'
set @where = N' WHERE columnName like '%'+ product.Status + '%''
case when @param = 1 then concat(@sql,@where)
execute sp_executesql @sql
答案 3 :(得分:0)
我根据您的描述(不是代码)猜测您需要如下查询:
select *
from product
where ([Status] like '%' + @param1 + '%'
or @param1 is null)
如果@ param1为空,这将返回@ param1上所有通配符匹配状态的产品或返回所有行。
如果您在where子句中添加更多内容,我会使用括号。
答案 4 :(得分:0)
like
运算符需要两个参数:
where ( @Param1 = 1 and product.Status like '%' + @Pattern + '%' ) or
( @Param1 = 2 and product.Voltage = 240 ) or
( @Param1 is NULL )