如果<> 0条件将在SQL中将Null和0视为相同

时间:2019-06-19 06:53:10

标签: sql-server stored-procedures case

我需要比较变量以防存储过程中的情况发生。

case when @column <> 0 then ...
     ELSE 0 END

但是每当将@column设为NULL时,上述脚本将返回0。

sql将0NULL视为相同。

我正在使用sql server 2014。

谢谢所有

2 个答案:

答案 0 :(得分:4)

不。 SQL将NULL视为“我不知道”。将任何内容与“我不知道”进行比较都会得到“我完全不知道”的答案。看:

  

-约翰有多高?
  -我不知道
  -比约翰高2厘米?
  -我不知道。

即使两个NULL值之间的比较也不是正确的:如果我不知道约翰有多高,而我不知道杰克有多高,我不能得出结论约翰和杰克一样高(我不能得出约翰和杰克一样高)的结论。唯一明智的答案是……“我不知道”。

测试NULL的方法是使用IS运算符,该运算符专门针对这种情况(例如@column IS NULL@column IS NOT NULL)。

因此NULL不等于0,也不等于0NULL <> 0的结果为NULL。但是,NULL在涉及条件时是虚假的,因此CASE认为只要ELSE@column,您就应该获得NULL分支。

答案 1 :(得分:0)

如果如果您想执行then的{​​{1}}部分,且case的值为column,则修改条件以检查null

nulls