2014-01-07 53 views
2

我想添加一个CASE语句,但是我需要一个OR,并且我遇到了一些麻烦。SQL Server中的WHERE子句中的CASE语句

我不知道我怎么能做到这一点,但我希望有人能帮助。这就是我要做的:

SELECT * 
    FROM Table1 
WHERE IsUpdate = CASE WHEN @Type = 'Yes' THEN 1 ELSE (0 OR 1) END 

所以基本上,我想选择只能有IsUpdate设置为1行时@Type =“yes”,否则我要选择行,其中IsUpdate = 0或IsUpdate = 1。有什么想法?

回答

3

你并不需要一个CASE,我认为值只能是01

SELECT * FROM Table1 
WHERE @Type <> 'Yes' OR IsUpdate = 1 

如果这是坐在一个存储过程,它可能更好地使用If-Else代替参数检查,因为上面的查询是non-sargable,所以它可能在大型表上效率低下。

+0

那么,它肯定是一个漫长的一天。谢谢。 – rjbogz

3

,你的逻辑相匹配的完整where条款是:

where (@Type = 'Yes' and IsUpdate = 1) or 
     (@Type <> 'Yes' and IsUpdate in (0, 1)) 

您可以简化这一点,如果你知道一些关于在列中的值。例如,如果IsUpdate取值为01(而不是NULL):

where @Type <> 'Yes' or IsUpdate = 1