2010-12-14 83 views

回答

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.*) 
+0

超.......太好了。非常感谢。 – Thomas 2010-12-14 12:18:52