当将变量设置为Null时,我需要检查并验证它是null还是另一个值。如果我将两者进行比较,即使我设置了@tmp = null,根据这个测试,如果@tmp = null返回False,它也不起作用。然而,@tmp is null返回True。根据这个,我如何将另一个值与@tmp进行比较,@tmp也是null,以查看它们是否匹配?因为它们是Integer,所以我不能设置为空字符串,零也不适合删除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。
发布于 2019-05-15 03:44:02
这是因为您假设@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对NULL
使用标准ANSI NULL方法,即任何值与NULL
之间的相等比较始终为false。
如果为SET ANSI_NULLS OFF
,则@tmp = NULL
返回true。但是,我建议不要使用这种方法
https://stackoverflow.com/questions/56137545
复制相似问题