2010-01-12 75 views
1

在SQL Server 2008中,我使用觸發器來捕獲對數據庫中的特定表進行的所有更改。我的目標是捕捉整個變化。也就是說,要捕獲正在插入的數據,而不僅僅是插入數據。在觸發器中,我使用DBCC INPUTBUFFER返回的結果集的EventInfo列來獲取當前正在執行的SQL語句以及Parameters列以獲取所用參數的計數。這在大多數情況下都適用,但是當外部應用程序使用ADO.NET執行查詢或使用SSMS中的「編輯頂部200行」插入/刪除行時,EventInfo沒有參數值。可以使用DBCC INPUTBUFFER完全捕獲參數化查詢嗎?

例如,如果一個查詢字符串在查詢窗口或作爲在ADO.NET非參數化串查詢執行,EventInfo表示:

INSERT INTO DTS_TABLE ([ID] ,[DTS_ID] ,[DTS] ,[TICS]) VALUES (10, 9, GETDATE(), 91234) 

當使用編輯前200行插入相同數據或ADO.NET一個參數化查詢,EventInfo顯示(新行增加了可讀性):

(@id int,@dtsid int,@dts datetime,@tics int) 
INSERT INTO DTS_TABLE ([ID] ,[DTS_ID] ,[DTS] ,[TICS]) 
VALUES (@id, @dtsid, @dts, @tics) 

反正有我的觸發範圍內訪問的參數值?

+0

我有同樣的問題,這裏是我尋找答案的理由:我需要殺死一個'插入'操作阻止近250選擇。在我殺死它之前,我想知道哪些數據會丟失。 – KSK 2014-10-30 08:56:53

+0

如果有人知道如何獲得參數 – davey 2015-01-21 11:53:51

回答

0

爲什麼要關心參數值?所有你應該關心的是表格中的舊值和新值(在更新的情況下是舊的和新的 - 對於插入,只有新的值)。

由於您使用的是SQL Server 2008,因此您應該查看新的Auditing feature。有更多的細節可用,並且性能比使用觸發器有很大的提高。

Here is a page描述了使用新功能可用的信息。

Here is a how to page上的新功能。