2013-10-14 1 views
0

У меня есть следующий простой триггер для обновления строки. Предполагается, что он должен обновить столбец LastUpdatedDate в обновляемых строках. Он хорошо работает с обновлением с одной строкой, но не с обновлением рядов строк, которое запускается со стороны приложения.Триггер обновления SQL Server не работает должным образом при пакетном обновлении

ALTER TRIGGER [gc].[T_UpdateObservation] ON [gc].[GCUR_OBSERVATION] 
    AFTER UPDATE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- get the last id value of the record inserted or updated 
    DECLARE @id INT 
    SELECT @id = [ObservationId] 
    FROM DELETED 

    -- Update statements for trigger here 
    UPDATE GCUR_OBSERVATION 
    SET GCUR_OBSERVATION.LastUpdatedDate = getdate() 
    WHERE [ObservationId] = @id 

END 

Может ли кто-нибудь дать несколько советов? Заранее спасибо!

Приветствия, Alex

ответ

2

Вам просто нужно построить set-based updated вместо одного на основе одной переменной:

ALTER TRIGGER [gc].[T_UpdateObservation] 
ON [gc].[GCUR_OBSERVATION] 
AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE g SET LastUpdatedDate = CURRENT_TIMESTAMP 
    FROM gc.GCUR_OBSERVATION AS g 
    -----^^ why is the schema missing from your version of the trigger? 
    INNER JOIN inserted AS i 
    ON g.ObservationID = i.ObservationID; 
END 
GO 
Смежные вопросы