2012-03-05 2 views
0

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

Например: если param1 значение 1, то делать, как условие,

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

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

Как бы я это в статье WHERE? Спасибо,

+0

Является ли это в C#/VB кода или в чистом TSQL? – DaveShaw

+0

его чистый TSQL, это процедура магазина. – Ben

+0

Как может param1 быть равным 1 и быть похожим на ''% '+ product.Status +'% ''? –

ответ

0

Так что вам нужно изменить предложение where в зависимости от параметра. Используйте sp_executesql: вы можете создать запрос в виде строки, так что вы можете добавить где положение, если @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 
1

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

if @param1 = 1 
    Begin 
     select * from tableName WHERE columnName like '%'+ product.Status + '%' 
    End 
else 
    Begin 
     select * from tableName WHERE columnName 
    End 
+0

Могу ли я просто сделать предложение where в условии if? Я не хочу, чтобы выбор дублировался много раз ... – Ben

+1

Я думаю, что нет, вы можете использовать InLine 'IF' и' Case' только для указанного состояния столбца. –

0

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

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

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

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

0

Оператор like необходимы два параметра:

where (@Param1 = 1 and product.Status like '%' + @Pattern + '%') or 
    (@Param1 = 2 and product.Voltage = 240) or 
    (@Param1 is NULL) 
2

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

Смежные вопросы