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

时间:2011-03-09 22:05:22

标签: sql sql-server-2008 triggers sql-update

我是触发器的新手,想要在更新列时创建触发器并使用该值更新另一个表。

我有一个带有年份列的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

4 个答案:

答案 0 :(得分:24)

您没有在触发器中引用table1。使用inserted伪表来获取“after”值。还要记住,更新可能会影响多行。

所以用

替换当前的update语句
UPDATE table2
SET    table2.annualyear = inserted.intannualyear
FROM   table2
       JOIN inserted
         ON table2.id = inserted.id  

答案 1 :(得分:9)

如果涉及intannualyear列,则只需更新table2中的记录。此外,这是Martin展示的两个表中的替代UPDATE语法

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

答案 2 :(得分:1)

根据this question,如果只有一个“下游”表,那么具有正确定义的外键关系的另一个选项将是级联更新。

答案 3 :(得分:0)

要补充上述答案,如果必须检查多个列,可以在插入和删除之间使用INNER JOIN,或者使用多个UPDATE()调用:

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