更新时的SQL Server触发器(仅限新数据)

时间:2014-04-01 18:19:35

标签: sql sql-server

快速提问,我们有一个简单的Trigger,我们需要使用Inserts into TableB,例如,如果任何3列(让我们称之为c1,c2或c3)得到更新。

但是,我已经看到触发器示例执行此操作,但如果c1,c2或c3使用相同的信息更新,我不希望它插入。它只能是新信息。

我知道有"更新后#34;但如果在列中放置相同的数据,这是否有效(因为如果是这样,我不想要这样做)

1 个答案:

答案 0 :(得分:0)

您可以使用INSTEAD OF UPDATE触发器。这个允许您查看更新前的值以及更新的值。

CREATE TRIGGER dbo.InsteadOfUpdateMyTable ON dbo.MyTable
    INSTEAD OF UPDATE
AS
    BEGIN
        INSERT INTO SomeOtherTable
                ( col1
                ,col2
                ,col3
                )
                SELECT i.col1
                       ,i.col2
                       ,i.col3
                    FROM INSERTED i
                    JOIN MyTable s
                        ON i.id = s.id
                           AND ( i.col1 <> s.col1
                                 OR i.col2 <> s.col2
                                 OR i.col3 <> s.col3
                               )
        UPDATE t
            SET t.col1 = i.col1
               ,T.col2 = i.col2
               ,T.col3 = i.col3 
            FROM MyTable t
            JOIN INSERTED i
                ON i.id = t.id
    END

这里是SQL Fiddle http://sqlfiddle.com/#!6/a249a/6