2013-09-16 26 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