Как создать триггер вставки обновления на SQL Server 2008 - PullRequest
0 голосов
/ 08 июля 2011

Привет, у меня есть 2 имени таблиц, скажем EmpOne и NotificationEmp1 обе таблицы имеют одинаковую структуру с одинаковым именем столбца, я хочу вставить запись обновления в таблицу NotificationEmp1, используя триггер, когда я вставляю записи обновления в EmpOne

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Ну, я не вижу точки триггера, которая точно синхронизирует копию таблицы, и вы предоставили очень расплывчатые спецификации, но я попробую.

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

Теперь не забудьте, что вам понадобится что-то для удаления строк из NoticiationEmp1 при удалении строк из EmpOne.Также здесь вообще нет обработки ошибок - в качестве примера (и это не вызовет ошибки), рассмотрим случай, когда строка была удалена непосредственно из NotificationEmp1, а позже обновлена ​​в EmpOne, она провалится через трещиныздесь ...

0 голосов
/ 08 июля 2011

Внутри триггера у вас есть логические (концептуальные) таблицы, которые называются «Вставлены» и «Удалены» и содержат записи, которые были изменены. Таким образом, вы можете просто вставить записи из них.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...