2012-05-31 4 views
0

Я пытаюсь создать триггер базы данных в SQL Server 2008 для таблицы tblCustomer. Мне нужно добавить новую строку в таблицу tblChanges каждый раз, когда есть вставка, обновление или удаление в таблице tblCustomer.Создать триггер базы данных для настраиваемого ChangeTable

В частности, мне нужно вставить CustomerId (PK), который был изменен, dateTime, что он произошел с изменением, и тип изменения (вставка, обновление, удаление).

У меня есть кое-что вдоль этих линий до сих пор, но не могу понять, остальное:

CREATE TRIGGER change_trigger 
AFTER INSERT OR UPDATE OR DELETE 
ON tblCustomer 

    DECLARE log_action varchar(30) 
BEGIN 

    IF INSERTING THEN 
     log_action := 'I'; 
    ELSEIF UPDATING THEN 
     log_action := 'U'; 
    ELSEIF DELETEING THEN 
     log_action := 'D'; 
    ELSE 
     DBMS_OUTPUT.PUT_LINE('undefined'); 
    END IF; 

    INSERT INTO tblChanges(ChanedPK, ChangedTime, ChangedType) 
    VALUES ... 

Я уверен, если какой-либо из выше SQL является правильным, как я не пытался запустить его но мои знания SQL ограничены. Любая помощь по заполнению кода и исправлению ошибок будет оценена.

ответ

0

Попробуйте что-то вдоль этих линий:

CREATE TRIGGER change_trigger AFTER INSERT, UPDATE, DELETE 
ON tblCustomer 
AS 
BEGIN 
    DECLARE log_action varchar(30) 

    IF EXISTS (SELECT * FROM INSERTED) AND NOT EXISTS(SELECT * FROM DELETED) 
     SET log_action = 'INSERT' 

    IF EXISTS NOT (SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED) 
     SET log_action = 'DELETE' 

    IF EXISTS (SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED) 
     SET log_action = 'UPDATE' 

    -- Your other code goes here 


END 

Может быть, вы должны прочитать ип T-SQL и DML триггеров в SQL Server первым. MSDN и многие другие сайты предоставляют отличные примеры того, как идти о вещах.

+0

Хорошо, это прекрасно работает, но мне также нужно вставить текущую дату и время, а также PK строки, которая была изменена. Любая помощь? –

+0

хорошо, я получил дату. его просто GETDATE(). Но у меня все еще есть проблемы с поиском pk –

+0

SQL Server предоставляет изменения в таблице через две виртуальные таблицы, которые вставляются и удаляются. Они содержат все измененные данные. – Mithrandir

Смежные вопросы