Sql server 真正空安全比较
在短于此的T-SQL中,是否有一种真正安全的方法来检查两个可空值是否不相等Sql server 真正空安全比较,sql-server,tsql,Sql Server,Tsql,在短于此的T-SQL中,是否有一种真正安全的方法来检查两个可空值是否不相等 where A.MyField != B.MyField or ( A.MyField is null and B.MyField is not null ) or ( A.MyField is not null and B.MyField is null ) 使用isnull()并不是真正安全的,因为它会将null值压缩为可能存在于数据集中的“真实”值,例如
where
A.MyField != B.MyField
or (
A.MyField is null
and B.MyField is not null
)
or (
A.MyField is not null
and B.MyField is null
)
使用isnull()
并不是真正安全的,因为它会将null
值压缩为可能存在于数据集中的“真实”值,例如:
where
isnull(A.MyField, '') != isnull(B.MyField, '')
将错误地认为空字符串'
和null
相等,这不是期望的结果。你可以提出一个“已知”的值,它永远不会发生或者非常不可能发生,但是这看起来像是一个创可贴修复。p>
出于几个原因(尤其是该功能正在贬值),将ANSI_NULLS
设置为off也是不可取的
是否有可以执行“真”空安全检查的功能,或者上面的代码是最好的方法?
WHERE EXISTS (SELECT A.MyField
EXCEPT
SELECT B.MyField)