SQL Server更新触发器,获取更新前后的字段

问题描述 投票:29回答:2

我需要SQL Server Update Trigger的示例,在更新之前和之后获取字段以在另一个表中执行sql statments

sql-server-2005
2个回答
82
投票

SQL Server触发器可以访问2个“魔术”表,这些表包含在导致触发器执行的语句中插入,更新或删除的每一行的行。

要在INSERT语句中查找所有插入的行:

select * from inserted

对于DELETE语句中的所有已删除行:

select * from deleted

对于UPDATE语句,更新的每一行都将出现在inserted表和deleted表中。 inserted表将在update语句之后保存行的新值,而删除的表将保存update语句之前的行的旧值。在两个表之间加入以获得所需内容:

select i.*, d.*
from inserted i
join deleted d on (i.id = d.id)

1
投票

你会想要删除特殊触发器和插入表。来自MSDN:

在DML触发器中,inserted和deleted表主要用于执行以下操作:扩展表之间的引用完整性。在视图底层的基表中插入或更新数据。测试错误并根据错误采取措施。找出数据修改之前和之后表的状态之间的差异,并根据该差异采取措施。已删除的表在DELETE和UPDATE语句期间存储受影响行的副本。在执行DELETE或UPDATE语句期间,将从触发器表中删除行并将其传送到已删除的表。删除的表和触发器表通常没有共同的行。 inserted表在INSERT和UPDATE语句期间存储受影响行的副本。在插入或更新事务期间,新行将添加到插入的表和触发器表中。插入表中的行是触发器表中新行的副本。

check here for more info

© www.soinside.com 2019 - 2024. All rights reserved.