SQL Server 2005 WHERE Предложение с похожим условием - PullRequest
0 голосов
/ 06 марта 2012

Мне нужно построить предложение WHERE на основе параметра, который был передан в хранимую процедуру.

Например: если значение param1 равно 1, тогда выполняется условие like

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

иначе я хочу игнорировать подобное условие, и оно вернуло бы все строки ....

Как бы я это сделал в предложении WHERE?Спасибо,

Ответы [ 5 ]

2 голосов
/ 29 ноября 2012

@ param1 как ISNULL ('%' + product.Status + '%', '%')

1 голос
/ 06 марта 2012

Вы должны использовать IF Условие. Попробуйте что-то вроде этого.

if @param1 = 1
    Begin
        select * from tableName WHERE columnName like '%'+ product.Status + '%' 
    End
else
    Begin
        select * from tableName WHERE columnName
    End
0 голосов
/ 06 марта 2012

Оператору like нужны два параметра:

where ( @Param1 = 1 and product.Status like '%' + @Pattern + '%' ) or
  ( @Param1 = 2 and product.Voltage = 240 ) or
  ( @Param1 is NULL )
0 голосов
/ 06 марта 2012

Мое предположение из вашего описания (не кода) состоит в том, что вам нужен запрос, подобный следующему:

select *
from product
where ([Status] like '%' + @param1 + '%'
    or @param1 is null)

Это вернет все продукты, которые соответствуют подстановочному статусу в @ param1, или вернет все строки, если @param1 имеет значение null.

Я использовал круглые скобки в том случае, если вы добавите больше к предложению where.

0 голосов
/ 06 марта 2012

Так что вам нужно изменить предложение where в зависимости от параметра.Используйте sp_executesql : вы можете построить запрос в виде строки, поэтому вы можете добавить предложение where, если @param = 1:

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
...