在 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)
无论如何可以在我的触发器的上下文中访问参数值吗?