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

更新时SQL Server触发器(仅新数据),sql,sql-server,Sql,Sql Server,快速提问,我们需要使用一个简单的触发器,例如,如果任何3列(我们称它们为c1、c2或c3)得到更新,它将插入到表B中 然而,我已经看到过这样做的触发器示例,但是如果c1、c2或c3使用相同的信息进行更新,我不希望它插入。它只能是新信息 我知道有“更新后”选项,但是如果相同的数据被放置在列中(因为如果是这样,我不希望这样)您可以使用而不是UPDATE触发器。这将允许您查看更新前的值以及更新到的内容 CREATE TRIGGER dbo.InsteadOfUpdateMyTable ON dbo.M

快速提问,我们需要使用一个简单的触发器,例如,如果任何3列(我们称它们为c1、c2或c3)得到更新,它将插入到表B中

然而,我已经看到过这样做的触发器示例,但是如果c1、c2或c3使用相同的信息进行更新,我不希望它插入。它只能是新信息


我知道有“更新后”选项,但是如果相同的数据被放置在列中(因为如果是这样,我不希望这样)

您可以使用
而不是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
创建触发器dbo.MyTable而不是dbo.MyTable上的updatemytable
而不是更新
作为
开始
插入到其他表中
(第1栏
,col2
,col3
)
选择i.col1
,i.col2
,i.col3
从插入i
加入MyTables
在i.id=s.id上
和(i.col1 s.col1
或者i.col2 s.col2
或i.col3 s.col3
)
更新t
设置t.col1=i.col1
,T.col2=i.col2
,T.col3=i.col3
来自MyT表
连接插入i
在i.id=t.id上
结束

这是更新触发器中的SQL FIDLE

,您可以访问“已删除”中的旧数据和“已插入”中的新数据。添加逻辑以比较匹配记录的值,并且仅当它们不同时才执行插入。那么您是说,如果插入新数据,或者更新了与C1、2或3中现有数据不同的数据,您只希望触发器将数据插入表B?如果更新数据与C1、2和3中已有的数据相同,则跳过插入表B?正确,我只想在C1、C2或C3列使用新数据而不是相同数据更新时,将数据插入表B。