我需要比较变量以防存储过程中的情况发生。
case when @column <> 0 then ...
ELSE 0 END
但是每当将@column设为NULL
时,上述脚本将返回0。
sql将0
和NULL
视为相同。
我正在使用sql server 2014。
谢谢所有
答案 0 :(得分:4)
不。 SQL将NULL
视为“我不知道”。将任何内容与“我不知道”进行比较都会得到“我完全不知道”的答案。看:
-约翰有多高?
-我不知道
-比约翰高2厘米?
-我不知道。
即使两个NULL
值之间的比较也不是正确的:如果我不知道约翰有多高,而我也不知道杰克有多高,我不能得出结论约翰和杰克一样高(我不能得出约翰和杰克一样高)的结论。唯一明智的答案是……“我不知道”。
测试NULL
的方法是使用IS
运算符,该运算符专门针对这种情况(例如@column IS NULL
或@column IS NOT NULL
)。
因此NULL
不等于0
,也不等于0
。 NULL <> 0
的结果为NULL
。但是,NULL
在涉及条件时是虚假的,因此CASE
认为只要ELSE
为@column
,您就应该获得NULL
分支。
答案 1 :(得分:0)
如果如果您想执行then
的{{1}}部分,且case
的值为column
,则修改条件以检查null
也
nulls