比较触发器sql server 2005中两个表中的两个记录

时间:2010-12-14 11:43:49

标签: sql-server-2005

我希望如果DELETED和INSERTED表具有相同的记录,那么我将不会更新另一个表。所以请告诉我如何比较具有相同结构的两个不同表DELETED和INSERTED中的两行。

请帮我提供示例代码。

感谢

1 个答案:

答案 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.*)