我需要SQL Server Update Trigger的示例,在更新之前和之后获取字段 在另一个表中执行sql语句
答案 0 :(得分:81)
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 :(得分:1)
您需要删除特殊触发器并插入表格。来自MSDN:
在DML触发器中,inserted和deleted表主要用于执行以下操作: 扩展表之间的引用完整性。 在视图底层的基表中插入或更新数据。 测试错误并根据错误采取措施。 找出数据修改之前和之后表的状态之间的差异,并根据该差异采取措施。 已删除的表在DELETE和UPDATE语句期间存储受影响行的副本。在执行DELETE或UPDATE语句期间,将从触发器表中删除行并将其传送到已删除的表。删除的表和触发器表通常没有共同的行。 inserted表在INSERT和UPDATE语句期间存储受影响行的副本。在插入或更新事务期间,新行将添加到插入的表和触发器表中。插入表中的行是触发器表中新行的副本。