我希望如果DELETED和INSERTED表具有相同的记录,那么我将不会更新另一个表。所以请告诉我如何比较具有相同结构的两个不同表DELETED和INSERTED中的两行。
请帮我提供示例代码。
感谢
答案 0 :(得分:3)
您必须测试每一列
INSERT OtherTable (keycol, col1, col2, ...)
SELECT
I.keycol, I.Col1, I.Col2, ..
FROM
INSERTED I
JOIN
DELETED D On I.keycol = D.keycol
WHERE
I.col1 <> I.col1
OR
I.col2 <> I.col2
OR
ISNULL(I.col3, 0) <> ISNULL(I.col3, 0) --nullable columns
OR
...
您也可以使用HASHBYTES
INSERT ...
SELECT
I.keycol, I.Col1, I.Col2, ..
FROM
INSERTED I
JOIN
DELETED D On I.keycol = D.keycol
WHERE
HashBytes('SHA1', CAST(I.col1 AS nvarchar) + I.col2 + etc)
<>
HashBytes('SHA1', CAST(D.col1 AS nvarchar) + D.col2 + etc)
不是100%可靠,请使用CHECKSUM
INSERT ...
SELECT
I.keycol, I.Col1, I.Col2, ..
FROM
INSERTED I
JOIN
DELETED D On I.keycol = D.keycol
WHERE
CHECKSUM(I.*) <> CHECKSUM(D.*)