2013-10-21 66 views
-1

在一个存储过程,让我们说我有一个标志,它可以是或在哪里,如果子句中的SQL查询

如果,那么我想select * from table A where name = 'blah'
如果,那么我想要select * from table A where name = blah and age = 13

有没有办法可以将and age = 13添加到存储过程查询?

这是我目前的。

IF @flag = 1 
    SELECT * from A where name = 'blah' 

ELSE 
    SELECT * from A where name = 'blah' and age = 13 

我想知道哪里查询变得很长的情况下,所以复制和粘贴有几个喜欢的ELSE情况下是非常低效的。

谢谢。

回答

3
SELECT * from A 
where name = 'blah' 
and (@flag = 1 or age = 13) 
1

您也可以使用Case statement;

Select * from A 
Where Name = 'blah' And Age = Case @flag when 1 then Age else 13 end 
+0

好的一个!!!!!但是在OR的情况下,OR会是更好的选择! :) –

+0

当将一个值与几个不同列之一(取决于一个标志)进行比较时,此解决方案可以很好地工作。虽然,我会在这个特定情况下使用'OR'选项(更简单)。 – JDB

+0

我同意你和你的发帖,因为它有点不同。 – Kaf