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

时间:2010-09-15 15:28:03

标签: sql sql-server-2005

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

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

如何让它发挥作用?

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

请帮助

3 个答案:

答案 0 :(得分:1)

SQL Server没有BEFORE INSERTBEFORE DELETE的概念。在大多数情况下,这些审计操作实际上不需要在操作之前执行 - 因此只需使用您已有的AFTER INSERTAFTER UPDATE触发器。

  

使用已删除的表可以正常工作   给我的数据   更新。插入的表提供   新的价值......不是我想要的   记录。

执行AFTER UPDATE触发器时,Inserted伪表包含新值 - Deleted表包含旧值。因此,对于AFTER UPDATE触发器,您可以访问两个伪表并同时获取旧值和新值。

AFTER INSERT触发器只能访问包含已插入值的Inserted伪表。

AFTER DELETE触发器只能访问Deleted伪表,其中包含已删除行的值。

答案 1 :(得分:0)

您无需使用before关键字。您可以正常创建触发器,然后从deleted表中选择,该表在触发器被触发时创建。

例如

create trigger Audit
on tblCustomers
after update, delete

insert into tblAudit
select * from deleted;

(未经测试,因为我这里没有SQL Server,但是如果不起作用,那么Create Trigger的BOL条目应该告诉你deleted表)

答案 2 :(得分:0)

create TRIGGER [update_Project] ON Project
FOR UPDATE
AS
INSERT project_history 
SELECT * FROM deleted

使用已删除的表,因为它为我提供了将要更新的数据。 inserted表提供了新值...而不是我想记录的值。