设置值= null测试时不会返回true,如果值= null-困惑



将变量设置为null时,但是我需要检查并验证其为null或其他值。如果我比较两者,则该测试将不起作用,如果@tmp = null返回false,即使我设置@tmp = null。但是@tmp是null返回true。根据此,如何将另一个值与@TMP进行比较,@TMP也可以查看它们是否匹配?由于这些是整数,所以我无法将其设置为空字符串,也不适合删除nulls。

declare @tmp integer = null
select case when @tmp = null then 1 when @tmp is null then 2 else 3 end 
-- Result is 2

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

这是因为您假设@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使用标准ANSI NULL方法对NULL s,这是任何值与NULL之间的平等比较始终是false。

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

相关内容

最新更新