SQL CASE从同一列存储过程sql server中检查两个条件是否无效。
SELECT *
FROM TestTable
WHERE CASE WHEN ISNULL(column1,0)=0 THEN ISNULL(OfficeFlg,0)=1 ELSE ISNULL(column2,0)=1 END
答案 0 :(得分:3)
我认为您正在寻找
WHERE (column1 IS NULL AND OfficeFlg IS NOT NULL)
OR
(column1 IS NOT NULL AND column2 IS NOT NULL)
让我们看看您的案子,并尝试从中了解您的需求
CASE WHEN ISNULL(column1,0)=0 THEN ISNULL(OfficeFlg,0)=1 ELSE ISNULL(column2,0=1) END
WHEN ISNULL(column1,0)=0 THEN ISNULL(OfficeFlg,0)=1
的意思是column1 IS NULL AND OfficeFlg IS NOT NULL
。
ELSE ISNULL(column2,0=1)
的意思是column1 IS NOT NULL AND column2 IS NOT NULL
。
或者(可能是因为不清楚您到底想做什么)
WHERE (column1 IS NULL AND OfficeFlg =1 )
OR
(column1 IS NOT NULL AND column2 =1 )
答案 1 :(得分:3)
您正在尝试使用CASE
表达式之类的CASE
表达式;那不是他们的工作方式。
CASE
表达式返回标量值,而不是布尔表达式的结果。如果我正确地理解了您的逻辑,那么您在布尔逻辑中所追求的将是:
SELECT *
FROM TestTable
WHERE ((Column1 = 0 OR Column1 IS NULL)
AND OfficFlg = 1)
OR (Column1 != 0 AND Column2 = 1);
注意,我已删除了ISNULL
和CASE
的使用。在WHERE
中使用任何一个都使查询不可SARG,这可能会严重影响性能。对于类似ISNULL
之类的事物,请使用IS NULL
和IS NOT NULL
表达式,对于CASE
,请使用带有OR
和AND
的布尔逻辑。>