Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 可以使用DBCC INPUTBUFFER完全捕获参数化查询吗?_Sql_Sql Server_Sql Server 2008_Dbcc - Fatal编程技术网

Sql 可以使用DBCC INPUTBUFFER完全捕获参数化查询吗?

Sql 可以使用DBCC INPUTBUFFER完全捕获参数化查询吗?,sql,sql-server,sql-server-2008,dbcc,Sql,Sql Server,Sql Server 2008,Dbcc,在SQLServer2008中,我使用触发器捕获对数据库中特定表所做的所有更改。我的目标是捕捉整个变化。也就是说,捕获插入的数据,而不仅仅是插入的数据。在触发器中,我使用DBCC INPUTBUFFER返回的结果集的EventInfo列获取当前正在执行的SQL语句,并使用Parameters列获取所用参数的计数。这在大多数情况下都有效,但当外部应用程序使用ADO.NET执行查询,或使用SSMS中的Edit Top 200 rows插入/删除行时,EventInfo没有参数值 例如,如果在查询窗口

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

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

  INSERT INTO DTS_TABLE ([ID] ,[DTS_ID] ,[DTS] ,[TICS])  VALUES (10, 9, GETDATE(), 91234)  
在ADO.NET中使用“编辑前200行”或参数化查询插入相同数据时,EventInfo会显示为可读性而添加的换行符:

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

在我的触发器的上下文中是否还有访问参数值的权限?

为什么您会关心参数值?在更新的情况下,您只需要关心表中的旧值和新值旧值和新值-对于插入,只需要新值

由于您使用的是SQLServer2008,因此应该查看新的。有更多的细节可用,性能比使用触发器有了很大的提高

它描述了使用新功能提供的信息


关于新功能。

我也有同样的问题,下面是我寻求答案的原因:我需要终止一个“插入”操作,该操作正在阻止近250个选择。在我杀死它之前,我想知道什么样的数据会丢失。如果有人知道怎么做的话,最好得到参数