2013-04-30 89 views
2

我有一個存儲過程和幾個布爾變量(Bit)。
如果某個變量是False,我想放一個WHERE語句。有條件/可選where語句

我知道我可以做這樣的事情:

IF (@myBoolean = 1) 
BEGIN 
SELECT * FROM myTable 
END 
ELSE 
SELECT * FROM myTable WHERE myTable.Foo = 'Bar' 

有沒有一種方法,使WHERE聲明optionnal?因爲我有這麼多的布爾變量,我不想爲每個可能性有不同的查詢。
這就是我的想法(我知道它不工作):

SELECT * FROM myTable 
CASE WHEN @myBoolean = 0 
THEN WHERE myTable.Foo = 'Bar' 
ELSE --Do nothing 
+0

這有什麼錯'SELECT * FROM myTable的WHERE @myBoolean = 1或(myTable.Foo = '酒吧' 和@myBoolean = 0)'? – 2013-04-30 18:01:31

回答

3
SELECT * FROM myTable 
where (@myboolean = 1 and foo = 'bar') or @myboolean = 0 
+0

假設這是myBool是假的。你查詢會做'SELECT * FROM myTable WHERE @myBoolean = 0'但是@myBool不是表的一部分,這不會拋出異常嗎? – phadaphunk 2013-04-30 18:03:47

+0

嘗試一下,看看它做了什麼! – 2013-04-30 18:04:44

+1

只是做,並在同一時間意識到... 'SELECT * FROM myTable WHERE TRUE' -_-'thanks – phadaphunk 2013-04-30 18:06:04