[英]SQL Server 2005 history tables using triggers
我有一个表,想要插入要更新或删除的记录的当前值。
我尝试在更新之前和删除之前创建触发器,但是SQL Server 2005不喜欢before词。
我该如何工作?
我希望触发器获取当前记录并将其复制到历史表,该历史表是基本表的镜像,其中添加了两个字段dateBackedUp
(使用getDate())和一个称为action
的字段(使用action'已更新”或“已删除”)
请帮忙
SQL Server没有BEFORE INSERT
或BEFORE DELETE
的概念。 实际上,大多数时候实际上不需要在执行操作之前执行这些审计操作-因此只需使用已经具有的AFTER INSERT
和AFTER UPDATE
触发器即可。
使用已删除的表是可行的,因为它为我提供了将要更新的数据。 插入的表格提供了新值...而不是我要记录的值。
当您执行AFTER UPDATE
触发器时, Inserted
伪表包含新值Deleted
表包含旧值。 因此,对于AFTER UPDATE
触发器,您可以访问两个伪表并获取旧值和新值。
AFTER INSERT
触发器只能访问包含已插入值的Inserted
伪表。
AFTER DELETE
触发器只能访问Deleted
伪表,该表包含Deleted
的行的值。
您不需要使用before
关键字。 您可以正常创建触发器,然后从deleted
表中进行选择,该触发器是在触发触发器时创建的。
例如
create trigger Audit
on tblCustomers
after update, delete
insert into tblAudit
select * from deleted;
(请耐心等待,因为我在这里没有SQL Server,但如果无法使用,则Create Trigger
的BOL条目应告诉您有关deleted
表的信息)
create TRIGGER [update_Project] ON Project
FOR UPDATE
AS
INSERT project_history
SELECT * FROM deleted
使用已删除的表是可行的,因为它为我提供了将要更新的数据。 插入的表格提供了新值...而不是我要记录的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.