我有一个表,想要插入正在更新或删除的记录的当前值。
我尝试在更新前和删除前创建触发器,但SQL Server 2005不喜欢之前的单词。
如何让它发挥作用?
我希望触发器获取当前记录并将其复制到历史表中,该历史表是基表的镜像,其中添加了两个dateBackedUp
字段(带有getDate())和一个名为action
(将“已更新”或“已删除”操作视为<)
请帮助
答案 0 :(得分:1)
SQL Server没有BEFORE INSERT
或BEFORE DELETE
的概念。在大多数情况下,这些审计操作实际上不需要在操作之前执行 - 因此只需使用您已有的AFTER INSERT
和AFTER 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表提供了新值...而不是我想记录的值。