2013-09-16 61 views
3

在MSSQL服務器中自動更新lastModified列我試圖創建一個觸發器,當該特定條目更新時,自動更新表中條目的列。觸發器使用scope_identity()

表名是「accounts」。列名是「修改的」(它是一個dateTime,表明這個條目最後更新的時間)。

我正在使用SCOPE_IDENTITY()指向我希望更新的條目。

觸發器已成功創建,但當我更新條目時,「修改」列不會更改。也許我錯誤地使用了SCOPE_IDENTITY()?這裏是我的代碼:

CREATE TRIGGER trg_UpdateModified 
ON dbo.accounts 
AFTER UPDATE 
AS 
    UPDATE dbo.accounts 
    SET modified = GETDATE() 
    WHERE sysID = SCOPE_IDENTITY() 

謝謝!!

+0

'SCOPE_IDENTITY'只有* *有史以來設置爲有意義的值由'INSERT'語句,所以在一個'更新後的'觸發器,它不會有意義 - 並且因爲名稱的「範圍」部分而加倍。觸發器的作用域與您的觸發器響應的DML發佈的語句的範圍不同。 –

+0

謝謝@Damien_The_Unbeliever。我是SQL新手......有關如何完成我想要完成的任何建議? – quelquecosa

回答

9

使用inserted表告訴你哪一行(小號)剛剛更新:

CREATE TRIGGER trg_UpdateModified 
ON dbo.accounts 
AFTER UPDATE 
AS 
    IF UPDATE(modified) RETURN; --Don't react recursively 
    UPDATE dbo.accounts 
    SET modified = GETDATE() 
    WHERE sysID in (select sysID from inserted) 
+0

+1我剛剛輸入了這個。基於'sysID'連接到'inserted'表會更有效率嗎? – Khan

+0

@JefferyKhan - 很簡單,任何一種方式都應該產生相同的實際執行計劃。 –

+0

@Damien_The_Unbeliever的作品!謝謝!!!!! – quelquecosa