1

在 SQL Server 2008 中,我使用触发器来捕获对数据库中特定表所做的所有更改。我的目标是捕捉整个变化。也就是说,要捕获正在插入的数据,而不仅仅是正在插入的数据。在触发器中,我使用 DBCC INPUTBUFFER 返回的结果集的 EventInfo 列来获取当前正在执行的 SQL 语句,并使用 Parameters 列来获取使用的参数的计数。这在大多数情况下都有效,但是当外部应用程序使用 ADO.NET 执行查询,或使用编辑 SSMS 中的前 200 行插入/删除行时,EventInfo 没有参数值。

例如,如果在查询窗口中执行字符串查询或在 ADO.NET 中作为非参数化字符串查询,EventInfo 将显示:

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

在 ADO.NET 中使用 Edit Top 200 Rows 或参数化查询插入相同的数据时,EventInfo 显示(为便于阅读而添加了换行符):

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

无论如何可以在我的触发器的上下文中访问参数值吗?

4

1 回答 1

0

为什么要关心参数值?您应该关心的是表中的旧值和新值(在更新的情况下是旧值和新值 - 对于插入,只有新值)。

由于您使用的是 SQL Server 2008,因此您应该查看新的审核功能。有更多可用的细节,与使用触发器相比,性能得到了很大改善。

这是一个描述使用新功能的可用信息的页面。

这是新功能的页面操作方法。

于 2010-01-13T00:07:19.310 回答