Sql server 使用scope_identity()在MSSQL服务器中自动更新lastModified列的触发器
我正在尝试创建一个触发器,当特定条目被更新时,该触发器会自动更新表中某个条目的列 表名为“accounts”。列名为“modified”(它是一个日期时间,表示此条目上次更新的时间) 我正在使用SCOPE_IDENTITY()指向我希望更新的条目 触发器已成功创建,但当我更新条目时,“modified”列不会更改。也许我使用的SCOPE_IDENTITY()不正确?这是我的密码:Sql server 使用scope_identity()在MSSQL服务器中自动更新lastModified列的触发器,sql-server,triggers,Sql Server,Triggers,我正在尝试创建一个触发器,当特定条目被更新时,该触发器会自动更新表中某个条目的列 表名为“accounts”。列名为“modified”(它是一个日期时间,表示此条目上次更新的时间) 我正在使用SCOPE_IDENTITY()指向我希望更新的条目 触发器已成功创建,但当我更新条目时,“modified”列不会更改。也许我使用的SCOPE_IDENTITY()不正确?这是我的密码: CREATE TRIGGER trg_UpdateModified ON dbo.accounts AFTER UP
CREATE TRIGGER trg_UpdateModified
ON dbo.accounts
AFTER UPDATE
AS
UPDATE dbo.accounts
SET modified = GETDATE()
WHERE sysID = SCOPE_IDENTITY()
谢谢 使用该表告诉您哪些行(s)刚刚更新:
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)
SCOPE\u IDENTITY
仅通过INSERT
语句设置为有意义的值,因此在更新后的触发器中,它没有意义,而且由于名称的“SCOPE”部分,它的意义加倍。触发器的作用域与发出DML的语句的作用域不同,DML是您的触发器触发的响应。谢谢@Damien_The_unsiver。我是SQL新手……有没有关于如何完成我想做的事情的建议?+1我刚把这个打出来。基于sysID
连接到插入的表是否更有效?@JefferyKhan-这很简单,任何一种方法都应该产生相同的实际执行计划。