2013-09-13 4 views
0

У меня есть небольшой запрос выбора, который выбирает данные из таблицы в соответствии с параметром, переданным процедуре.Оператор SELECT с предложением where с динамическим состоянием

DECLARE @flgParam bit 

. .

SELECT * 
FROM tablename 
WHERE flgRequired like <If @flgparam is 0 then 1 or zero , Else 1> 

, что это лучший способ построить где положение

+0

Что такое '@ flgcolumnval'? –

+0

Какие значения могут иметь значения «flgcolumnval»? Только 0 и 1? – Diego

+0

http://sqlfiddle.com/#!3/426316/2 Вот ссылка sqlfiddle – mhn

ответ

1

Немного грубо, но он должен работать, основываясь на требованиях:

select 
    S.itemname 
    ,S.flgrequired 
from 
    sample S 
where 
    (S.flgRequired >= @flgParam) 

Tested on sqlfiddle.

2

Я думаю, что-то вроде этого:

SELECT * 
from tablename 
where @flgparam is null or @flgcolumnval = @flgparam; 

@flgparam объявлен как немного, так что он может только взять на себя значения NULL, 0 и 1.

EDIT:

Я пытаюсь понять логику. Адаптированные для правильных имен:

SELECT * 
from sample 
where (@flgparam = 0 and flgRequired is not null) or 
     (coalesce(@flgparam, 1) = 1 and flgRequired = 1) 

like ненужно; вы можете сделать строгое равенство.

+0

Не кажется ли вам странным, что предложение WHERE не ссылается ни на какие столбцы? Таким образом, он либо вернет все строки, либо нет. –

+0

@MartinSmith. , , Мне кажется очень странным. Я предполагаю, что '@ flgcolumnval' на самом деле опечатка и должен быть' flgcolumnval'. –

+0

Или, может быть, оно содержит имя столбца, и они ожидали, что он будет автоматически срабатывать. –

0

Вы косяк переменных использовать, чтобы заменить столбцы в querys, чтобы добиться того, что вы должны создать свой запрос в виде строки @QUERY и выполнить его с помощью exec @QUERY

+0

[sp_execute привязана к Exec] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/17/bad-habits-to-kick-using-exec-instead-of-sp-executesql.aspx) Также [The Curse and Blessings of Dynamic SQL] (http://www.sommarskog.se/dynamic_sql.html) является хорошей общей ссылкой для динамических запросов –

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