如何使用更新触发器更新另一个表?

问题描述:

我是新来的触发器,并希望创建一个列的更新触发器和更新另一个表的值。如何使用更新触发器更新另一个表?

我有table1与一年的列,如果应用程序更新那一年列我需要更新与同年的表2。

ALTER TRIGGER [dbo].[trig_UpdateAnnualYear] 
    ON [dbo].[table1] 
    AFTER UPDATE 
AS 

if (UPDATE (intAnnualYear)) 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for trigger here 

    Update table2 set AnnualYear = intAnnualYear where table2.ID = table1.ID 
END 
+1

什么是你的问题? – Oded 2011-03-09 22:07:19

您在触发器内部不参考table1。使用inserted伪表来获取“after”值。另外请记住,更新可能会影响多行。

因此,与

UPDATE table2 
SET table2.annualyear = inserted.intannualyear 
FROM table2 
     JOIN inserted 
     ON table2.id = inserted.id 

替换当前update声明你只需要在列intannualyear参与表2更新记录。此外,这是跨越两个表的替代UPDATE语法从什么马丁已经显示出

IF UPDATE(intannualyear) 
    UPDATE table2 
    SET annualyear = inserted.intannualyear 
    FROM inserted 
    WHERE table2.id = inserted.id 
+0

+1这是更好的更新语法。 – 2011-03-10 00:20:34

+0

谢谢你的工作很棒。为了澄清其他人刚开始使用触发器,我找到了一篇很好的文章来解释插入的表格。 http://msdn.microsoft.com/en-us/library/ms191300.aspx – Spafa9 2011-03-10 14:01:32

this question,如果只有一个“下游”表,然后用正确定义的外键关系,另一种办法是级联更新。

为了补充以上的答案,如果你要检查多个列,你可以使用一个INNER JOIN的inserted和deleted之间,或几个UPDATE()调用:

IF (UPDATE(Col1) OR UPDATE(Col2)) BEGIN ...