在合并语句中比较 Null 与 Null

Zer*_*ity 5 isnull sql-server-2008-r2 merge-statement

在处理数十亿条记录以比较合并语句中的 NULL 时,哪种语句是完美或更好的。我尝试过 SET ANSI_NULLS OFF 但这在合并语句中不起作用。这是我的两种方法

ISNULL(SRCColumn,-11111) = ISNULL(DSTColumn, -11111)
Run Code Online (Sandbox Code Playgroud)

或者

SRCColumn = DSTColumn OR (SRCColumn  IS NULL AND DSTColumn  IS NULL)
Run Code Online (Sandbox Code Playgroud)

请告诉我是否有更好的方法来处理。因为我有大约 15 列需要比较。

Rya*_*yan 5

SRCColumn = DSTColumn OR (SRCColumn IS NULL AND DSTColumn IS NULL)

我建议您使用此版本,因为它最准确地表达了您希望 SQL Server 执行的操作。

这两个语句在逻辑上是等效的(除非 -11111 是该列的合法值),但是该语句更容易识别,并且这两个语句的运行时性能可能只有微不足道的差异。