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