是否有一种真正安全的方法来检查 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
也是不可取的(尤其是该功能正在被贬值)。
是否有功能可以进行“真正的”空安全检查,或者上面的代码是最好的方法吗?