2011-03-09 107 views
18

我是新來的觸發器,並希望創建一個列的更新觸發器和更新另一個表的值。如何使用更新觸發器更新另一個表?

我有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

回答

22

您在觸發器內部不參考table1。使用inserted僞表來獲取「after」值。另外請記住,更新可能會影響多行。

因此,與

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

替換當前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

1

this question,如果只有一個「下游」表,然後用正確定義的外鍵關係,另一種辦法是級聯更新。

0

爲了補充以上的答案,如果你要檢查多個列,你可以使用一個INNER JOIN的inserted和deleted之間,或幾個UPDATE()調用:

IF (UPDATE(Col1) OR UPDATE(Col2)) BEGIN ... 
相關問題