在测试value = Null时设置value = Null不会返回true-困惑

时间:2019-05-14 19:40:52

标签: tsql null

当将变量设置为Null时,我需要检查并确认它为null或其他值。如果我将两者进行比较,则不起作用,即使我将@tmp = null设置为@tmp = null也会返回False。但是@tmp为null会返回True。以此为例,我如何将另一个值与@tmp(也为null)进行比较,以查看它们是否匹配?由于这些是整数,因此我不能将其设置为空字符串,也不能将零设置为删除Null。

./configure

预期结果为1,但返回2。

1 个答案:

答案 0 :(得分:0)

这是因为您假设@tmp = null是比较@tmpNULL的值的有效方法。

实际上,您应该使用IS NULL来测试NULL的值:

declare @tmp integer = null

select case when @tmp IS NULL then 1 when @tmp is null then 2 else 3 end 

将其视为未定义的事物未定义的事物相同:不,不是。

但是,这个未定义的东西实际上是未定义的:是的。

偶然地,这是由于以下事实:默认情况下,SQL Server对NULL使用标准的ANSI NULL方法,即任何值与NULL之间的相等比较始终为假。 / p>

如果您SET ANSI_NULLS OFF,则@tmp = NULL返回true。但是,我建议您反对这种方法