[英]SQL Server 2012 trigger: Auditing. How to see previous value of a row without shadow table
我正在尝试创建一个审核表。 我在AdventureWorks
2012数据库中有一个名为person.address
的表。
我正在使用触发器来捕获对表的更改,唯一的问题是我不知道是否可以在编辑之前使用触发器来捕获行。 我试图节省资源和开销,所以试图不使用影子表。 我知道没有“插入前”触发器。 但有没有办法捕获连续包含的信息,当有人进行插入或更新时,可以在插入完成之前将此行写入audit.table?
谢谢。
给出一个有两行的简单表:
CREATE TABLE dbo.foo(a INT PRIMARY KEY);
INSERT dbo.foo(a) VALUES(1),(2);
然后更新触发器只是为了演示:
CREATE TRIGGER dbo.trfoo ON dbo.foo FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;
SELECT a FROM inserted;
SELECT a FROM deleted;
END
GO
动作的结果,例如:
UPDATE dbo.foo SET a += 1;
结果是:
a -- this is the *new* version of these rows
----
3
2
a -- this is the *old* version of these rows
----
2
1
此外,还有一个INSTEAD OF INSERT触发器,它允许您在插入之前执行操作(它们不会被称为BEFORE触发器,因为您仍然必须自己执行插入操作)。 更多信息在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.