2011-07-08 184 views
0

您好我有兩個表名稱說EmpOneNotificationEmp1這兩個表具有相同的結構具有相同的列名稱,我想在插入更新記錄時使用觸發器插入NotificationEmp1表中的更新記錄到EmpOne如何在SQL Server 2008上創建插入更新觸發器

+1

需要一些信息,比如是什麼的鑰匙表,有哪些列,是否有任何特殊的列如身份或計算列,你使用的是什麼版本的SQL Server ... –

+1

沒有什麼很出關於你的場景的普通情況,你還沒有提供任何信息,所以你可能剛剛搜索了它。 tkerwood的答案只是您從Books OnLine(BOL)獲得的骨架。 – cjk

回答

1

嗯,我沒有看到觸發器保持表的副本完全同步,並提供了非常模糊的規格,但我會給它一個鏡頭。

CREATE TRIGGER dbo.tr_EmpOne 
ON dbo.EmpOne 
FOR INSERT, UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT dbo.NotificationEmp1(columns) 
     SELECT columns 
     FROM inserted AS i 
     WHERE NOT EXISTS 
     (SELECT 1 FROM deleted WHERE key_column = i.key_column); 

    UPDATE n 
     SET col1 = i.col1, 
      col2 = i.col2 --, etc etc 
    FROM dbo.NotificationEmp1 AS n 
    INNER JOIN inserted AS i 
    ON i.key_column = n.key_column 
    INNER JOIN deleted AS d 
    ON i.key_column = d.key_column; 
END 
GO 

現在不要忘記你會需要的東西時,行從EmpOne刪除從NoticiationEmp1刪除行。此外,這裏根本沒有錯誤處理 - 作爲一個例子(並且這不會引發錯誤),考慮直接從NotificationEmp1中刪除一行並在EmpOne中稍後更新的情況,它將通過裂縫這裏...

0

在一個觸發器中,你有稱爲「已插入」和「已刪除」的邏輯(概念)表,用於保存已修改的記錄。所以你可以插入這些記錄。

CREATE TRIGGER [dbo].[Employee_Write_Audit] 
    ON [dbo].[EmpOne] 
    AFTER INSERT,DELETE,UPDATE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- all new inserted records and updated. 
    Insert into NotificationEmp1 select * from Inserted 
    -- just the deleted ones not the updated rows that are being removed. 
    Insert into NotificationEmp1 select * from Deleted where EmpOneId not in (select EmpOneId from inserted) 
END 
相關問題