快速提问,我们有一个简单的Trigger,我们需要使用Inserts into TableB,例如,如果任何3列(让我们称之为c1,c2或c3)得到更新。
但是,我已经看到触发器示例执行此操作,但如果c1,c2或c3使用相同的信息更新,我不希望它插入。它只能是新信息。
我知道有"更新后#34;但如果在列中放置相同的数据,这是否有效(因为如果是这样,我不想要这样做)
答案 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