SQL Server 2005 WHERE子句具有相似的条件

时间:2012-03-05 23:04:27

标签: sql sql-server-2005 stored-procedures

我需要根据传递给存储过程的参数构建一个WHERE子句。

例如:如果param1值为1则执行类似条件

 @param1 like '%'+ product.Status + '%' 

否则我想忽略类似的条件,它会返回所有行....

我如何在WHERE条款中执行此操作?谢谢,

5 个答案:

答案 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 )