触发器使用scope_identity()
在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()
谢谢!!
使用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)
+1我刚刚输入了这个。基于'sysID'连接到'inserted'表会更有效率吗? – Khan
@JefferyKhan - 很简单,任何一种方式都应该产生相同的实际执行计划。 –
@Damien_The_Unbeliever的作品!谢谢!!!!! – quelquecosa
'SCOPE_IDENTITY'只有* *有史以来设置为有意义的值由'INSERT'语句,所以在一个'更新后的'触发器,它不会有意义 - 并且因为名称的“范围”部分而加倍。触发器的作用域与您的触发器响应的DML发布的语句的范围不同。 –
谢谢@Damien_The_Unbeliever。我是SQL新手......有关如何完成我想要完成的任何建议? – quelquecosa