我有SQL脚本,它需要检查两列之间的值,以查看值是否不同。之前我使用<>
进行了一次简单的检查,但在空值方面它似乎没有削减它。
以下是检查值是否不同的唯一方法?
declare @intValue int = 1;
declare @intNull int = 1;
select 'Values are not the same'
where (@intNull <> @intValue) or (@intValue is null and @intNull is not null) or (@intValue is not null and @intNull is null);
答案 0 :(得分:1)
你所做的是正确的,据我所知,这是唯一的方法。
答案 1 :(得分:1)
您可以选择一个您知道从未在数据中使用的虚拟值:
coalesce(c1, -9999) <> coalesce(c2, -9999)
它与你的基本相同,但有点短。它可能不适合所有情况。
你问题的标题要求&#34;最佳&#34;办法。我正在回应&#34;这是唯一的方式&#34;问题在后面的问题。这样可以省去一些打字,但是如果没有认真考虑,依靠这样的特殊值可能是不明智的。
答案 2 :(得分:1)
您也可以使用isnull
。
declare @intValue int = 1;
declare @intNull int = 1;
select 'Values are not the same'
where (isnull(@intNull,'') <> isnull(@intValue,''))
答案 3 :(得分:1)
使用BINARY_CHECKSUM
:
declare @intValue int = 1;
declare @intNull int = NULL;
SELECT CAST(BINARY_CHECKSUM(@intValue) AS BIGINT)
, CAST(BINARY_CHECKSUM(@intNull) AS BIGINT)
BINARY_CHECKSUM
也适用于字符串。