【问题标题】:How do I create Insert Update trigger on SQL Server 2008如何在 SQL Server 2008 上创建插入更新触发器
【发布时间】:2011-07-08 04:40:29
【问题描述】:

您好,我有 2 个表名为 EmpOneNotificationEmp1,这两个表具有相同的结构和相同的列名,当我将更新记录插入 EmpOne 时,我想使用触发器在 NotificationEmp1 表中插入更新记录

【问题讨论】:

  • 需要一些信息,比如表的键是什么,列是什么,是否有任何特殊列,如 IDENTITY 或计算列,您使用的是什么版本的 SQL Server...跨度>
  • 你的场景没有什么不寻常的地方,你也没有提供任何信息,所以你还不如用谷歌搜索一下。 tkerwood 的答案只是您从 Books OnLine (BOL) 获得的骨架。

标签: sql-server tsql triggers


【解决方案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 中更新的情况,它将通过裂缝这里...

【讨论】:

    【解决方案2】:

    在触发器中,您有称为“已插入”和“已删除”的逻辑(概念)表,其中包含已修改的记录。所以你可以从这些中插入记录。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多