Sql server 使用scope_identity()在MSSQL服务器中自动更新lastModified列的触发器

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

我正在尝试创建一个触发器,当特定条目被更新时,该触发器会自动更新表中某个条目的列

表名为“accounts”。列名为“modified”(它是一个日期时间,表示此条目上次更新的时间)

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

触发器已成功创建,但当我更新条目时,“modified”列不会更改。也许我使用的SCOPE_IDENTITY()不正确?这是我的密码:

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-这很简单,任何一种方法都应该产生相同的实际执行计划。