SQL Server中WHERE子句中的CASE语句

时间:2014-01-07 15:59:52

标签: sql-server select case where-clause

我正在尝试添加一个CASE语句,但我需要一个OR而且我遇到了一些麻烦。

我不知道如何做到这一点,但我希望有人可以提供帮助。这是我想要做的:

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

所以基本上,我想在@Type ='是'时只选择将IsUpdate设置为1的行,否则我想选择IsUpdate = 0或IsUpdate = 1的行。任何想法?

2 个答案:

答案 0 :(得分:3)

您不需要CASE,我认为该值只能是01

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

如果它位于存储过程中,最好使用If-Else而不是参数检查,因为上面的查询是non-sargable,因此在大型表上可能效率低下。

答案 1 :(得分: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