2010-09-15 117 views
0

我有一个表并希望插入正在更新或删除的记录的当前值。使用触发器的SQL Server 2005历史记录表

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

我如何得到这个工作?

我想触发取当前记录,并将其复制到历史表是基表与dateBackedUp两个附加字段(即需要GETDATE())和场称为action镜(即采取行动“更新”或删除“)

请帮助

+0

请发布您正在尝试的代码。 – 2010-09-15 15:31:57

回答

1

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

使用已删除的表工作,它 给了我将要 更新的数据。插入的表格提供了 新的值...不是我想要 进行记录的那些值。

当你做一个AFTER UPDATE触发时,Inserted伪表中包含的新的价值观 - 与Deleted表包含旧值。因此,对于AFTER UPDATE触发器,您可以访问两个伪表并获取旧值和新值。

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

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

0

你并不需要使用before关键字。您可以像平常一样创建一个触发器,然后从deleted表中选择,该表在触发器被...触发时创建。

create trigger Audit 
on tblCustomers 
after update, delete 

insert into tblAudit 
select * from deleted; 

(未经测试,因为我不这里有一个SQL服务器,但如果不工作,那么对于Create Trigger的BOL条目应该告诉你关于deleted表)

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

使用已删除的表格的作品,因为它给了我将被更新的数据。插入的表提供了新的值...不是我想要记录的值。

+0

如果您发布的是代码或XML,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以良好地格式化和语法突出显示它!另外:您应该通过编辑**更新**原始问题,而不是自己添加“虚拟”答案...... – 2010-09-15 16:46:28