如何确定存储过程触摸了哪些行?

时间:2015-01-19 22:29:15

标签: sql sql-server sql-server-2012

我有一个存储过程,它在整个数据库中有一些依赖项,其中包括其他过程,这些过程又处理其他表。每个过程仅从这些表中选择数据,不进行删除,更新或插入。这个程序从中抽取的表格相当大(数百万条记录),而且程序通常只从每个表格中选择一个小的子集(10到100个记录)。

我想知道,对于存储过程选择的每个表,特别是选择了哪些记录。 (正在提取此数据并用于为我们的质量支持小组生成测试方案。)

到目前为止,我已经研究过使用分析器,审核和扩展事件。所有这些似乎都接近了,因为它们告诉我对每个表执行了某个select语句。这样就足够了,但是有一个挂断。

通常,这些select语句的where子句包含在调用过程中某处定义的变量。 Profiler,audits和扩展事件似乎没有向我显示处于完全准备状态的select语句(变量被值替换)。

我希望看到返回的特定记录列表,或者用于返回数据的select语句,并将变量替换为具体值。

有没有办法实现这个目标?


使用一些附加信息进行修改:

我将profiler设置为show并且时间sproc语句启动或tsql语句启动。这将在跟踪中显示包含SET或SELECT的每个语句,以便为变量赋值。例如,我会看到像DECLARE @Foo BIT = 1这样的行,稍后我会看到一个声明SELECT Flar FROM Grib WHERE Narg = @Foo。但是,我后面真正想要看到的是SELECT Flar FROM Grib WHERE Narg = 1

0 个答案:

没有答案