2014-01-07 56 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