繁体   English   中英

使用触发器的SQL Server 2005历史记录表

[英]SQL Server 2005 history tables using triggers

我有一个表,想要插入要更新或删除的记录的当前值。

我尝试在更新之前和删除之前创建触发器,但是SQL Server 2005不喜欢before词。

我该如何工作?

我希望触发器获取当前记录并将其复制到历史表,该历史表是基本表的镜像,其中添加了两个字段dateBackedUp (使用getDate())和一个称为action的字段(使用action'已更新”或“已删除”)

请帮忙

SQL Server没有BEFORE INSERTBEFORE DELETE的概念。 实际上,大多数时候实际上不需要在执行操作之前执行这些审计操作-因此只需使用已经具有的AFTER INSERTAFTER 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM