2013-04-30 87 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