是否有一种真正安全的方法来检查 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
isnull(A.MyField, '') != isnull(B.MyField, '')
会错误地认为空字符串 ''
和 null
相等,这不是期望的结果。您可以想出一个永远不会发生或极不可能发生的“已知”值,但这似乎是一个创可贴修复。
出于多种原因(尤其是该功能正在被贬值),设置 ANSI_NULLS 关闭也是不可取的。
是否有功能可以进行“真正的”空安全检查,或者上面的代码是最好的方法吗?
最佳答案
对于 2005 年以上的版本 You can use
WHERE EXISTS (SELECT A.MyField
EXCEPT
SELECT B.MyField)
来自 SQL Server 2022 you can use
WHERE A.MyField IS DISTINCT FROM B.MyField
关于sql-server - 真正的空安全比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53176564/