2014-01-02 9 views
1

Я знаю, что вокруг этого было множество вопросов Q, но после прочтения никто, похоже, не испытывает такой же проблемы, как и я.SQL Server 2008 R2 Trigger

Справочная информация. Я ищу для создания инкрементных обновлений в кубе, но не имею временную метку обновления на таблице. Теперь я ищу создать отдельную таблицу, которая обновляется с помощью триггера с помощью gkey и текущей даты и времени, когда запись обновляется.

Мой триггер на столе выглядит следующим образом:

CREATE TRIGGER trgAfterUpdateVisitDetails ON [visit_details] 
FOR UPDATE 
AS 
begin 
    declare @VD_Gkey nvarchar 
    declare @today DATETIME = SYSDATETIME() 

    insert into [UpdatedVD] 
    SELECT 
     @VD_Gkey, @today 
    FROM 
     [visit_details] 
End 

Это дает мне выход, как показано ниже, но с 917 линиями одного и того же:

+---------+-------------------------+ 
| VD_Gkey |   today   | 
+---------+-------------------------+ 
| NULL | 2014-01-02 11:21:23.963 | 
| NULL | 2014-01-02 11:21:23.963 | 
+---------+-------------------------+ 

Я знаю, что это будет что-то очень просто, но я не могу обдумать это.

Любая помощь будет блестящей.

Спасибо.

+2

Ваш триггер не относится к или '' Inserted' или таблиц псевдо Deleted', которые содержат информацию о тех строках, которые были на самом деле пострадавших командой 'UPDATE' ... вам нужно ** соединить ** с любой из этих двух псевдо-таблиц, чтобы ограничить ваш оператор' INSERT' теми строками, которые были ** фактически обновлены **! –

ответ

3

Вам просто нужно, чтобы получить доступ к inserted and deleted псевдо-таблицы:

CREATE TRIGGER trgAfterUpdateVisitDetails ON [visit_details] 
FOR UPDATE 
AS 
begin 
    insert into 
     [UpdatedVD] 
    SELECT 
     i.VD_Gkey, CURRENT_TIMESTAMP 
    FROM 
     inserted i; 
End 
+0

Это похоже на трюк. Блестяще, спасибо! – LaLa

+1

Поскольку это триггер обновления, и я предполагаю, что 'VD_Gkey' является PK, который не будет обновляться, здесь не имеет значения, используете ли вы' вставленный' или 'deleted'. Очевидно, что в общем случае 'deleted' будет содержать старые значения, а' insert' будет содержать новые значения после обновления. – StuartLC

+0

@Lala: если этот ответ помог вам решить вашу проблему, пожалуйста, [** принять этот ответ **] (http://meta.stackexchange.com/q/5234/153998). Это покажет вашу признательность тем, кто * провел свое время, чтобы помочь вам *. –

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