这更多是为了满足我自己的好奇心。鉴于以下声明:
DECLARE @result BIT
SET @result = CASE WHEN NULL <> 4 THEN 0
ELSE 1
END
PRINT @result
为什么我得到“1”而不是“0”
将其更改为:
DECLARE @result BIT
SET @result = CASE WHEN NULL IS NULL
OR NULL <> 4 THEN 0
ELSE 1
END
PRINT @result
正确地给我回“0”
我知道 NULL 比较可能很棘手,但是这个特殊的例子在我们的代码审查过程中漏掉了。
任何澄清将不胜感激
最佳答案
这是因为 3 valued logic .在第一种情况下 Unknown 不会评估为 true 所以你最终在 else
DECLARE @result BIT
SET @result = CASE WHEN Unknown THEN 0
ELSE 1
END
PRINT @result
在第二种情况下,您正在执行 True 或 Unknown,其计算结果为 true。
DECLARE @result BIT
SET @result = CASE WHEN True
OR Unknown THEN 0
ELSE 1
END
PRINT @result
关于SQL Server 2005 - 在比较中使用 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2976333/