簡體   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