繁体   English   中英

SQL Server 2012触发器:审核。 如何在没有影子表的情况下查看行的先前值

[英]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.

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