我知道SQL中的NULL
是一个未知值,因此NULL
不等于NULL
,因为两者都是未知的,但我期待第二个IF
返回not eq
,而是返回eq
。为什么?我错过了什么?为什么他们都评价其他?
declare @i int = null
declare @i2 int = null
if @i = @i2 select 'eq' else select 'not eq'
if @i <> @i2 select 'not eq' else select 'eq'
答案 0 :(得分:1)
最简单的是,这可以解释为:
NULL
的值未知(或该值不存在)NULL
(例如,等级=
,不等式<>
,大于/小于'&gt;')的任何比较的值都会评估为未知(即NULL
本身)。因此,@i = @i2
和@i <> @i2
都会返回相同的Unknown
或NULL
结果。 NULL
或未知不是True
,控件始终会分支到ELSE
块,而不会分支到THEN
块。 答案 1 :(得分:0)
NULL
是SQL中的已知值(和大多数字符集)。
在替换变量后的问题中,您的第二次测试等同于NULL <> NULL
。由于某些东西既不大也不小,你的测试返回false,因此SELECT
返回eq
。
注意:如果遇到无法识别或无效的值,某些函数以及某些操作可能会返回NULL
。因此,即使值不等于NULL
,函数的值也可以这样做。即value <> NULL
,FUNCTION_1( value ) = NULL
可能仍然是真的。