在 SQL Server 中评估“value1 与 value2 不不同”的最佳方法

Mar*_*lot 2 sql sql-server where-clause sql-server-2014 sql-null

SQL Server 是否有与 Ansi SQL 运算符等效的运算符:IS DISTINCT FROM/IS NOT DISTINCT FROM?

我知道我可以替换:

value1 is not distinct from value2
Run Code Online (Sandbox Code Playgroud)

和 :

(value1 = value2) or (value1 is null and value2 is null)
Run Code Online (Sandbox Code Playgroud)

或者 :

coalesce(value1, -1) = coalesce(value2, -1)
Run Code Online (Sandbox Code Playgroud)

但是这些选项会阻止引擎使用索引,那么SQL Server是否有特定的运算符来检查这种比较?

谢谢。

GMB*_*GMB 5

不。

null不幸的是,与其他数据库不同,例如 Postgres(支持标准IS DISTINCT FROM运算符)或 MySQL(具有名为 的扩展运算符), SQL Server 没有实现-safe 运算符<=>

所以你基本上坚持以下结构:

(value1 = value2) or (value1 is null and value2 is null)
Run Code Online (Sandbox Code Playgroud)