将变量设置为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
是比较@tmp
和NULL
的值的有效方法。
实际上,您应该使用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。但是,我建议反对这种方法