2010-03-24 55 views
9

我运行下面的语句,看看哪些查询在SQL Server中正在执行:如何获得的参数值dm_exec_sql_text

select * 
from sys.dm_exec_requests r 
cross apply sys.dm_exec_sql_text(r.sql_handle) 
where r.database_id = DB_ID('<dbname>') 

说回来SQL文本参数:

(@Parm0 int) select * from foo where foo_id = @Parm0 

有什么办法来获取该语句正在使用的参数的值?说加入另一张桌子或者?

+0

多一点工作,以这种方式得到它,但它的工作,如果我必须拥有它。谢谢! – 2010-03-26 15:21:55

+1

你有没有发现这个解决方案?接受的答案似乎并不奏效...... – 2016-03-11 10:47:59

回答

4

编辑:Remus是正确的,这只会在查询计划第一次触及缓存时带出编译版本,而不是后续运行。

您应该能够从查询计划中获取参数,因为它包含使用的最后一个参数。改变你的代码:

select * 
from sys.dm_exec_requests r 
cross apply sys.dm_exec_query_plan(plan_handle) as qp 
cross apply sys.dm_exec_sql_text(r.sql_handle) 
where r.database_id = DB_ID('<dbname>') 

你会发现查询计划query_plan的最后一栏,查询计划,您可以手动检查的XML版本,在XML的底部是参数,或者如果你喜欢使用XML解析和XQuery来提取参数列表标签

+4

我认为这些是在计划生成期间嗅探的参数,而不是最后使用的参数。 – 2010-03-24 17:45:12

+0

你的权利,这使得这是一个母马,因为我没有看到其他的DMV,记录了简单/强制参数化对声明做了什么 – Andrew 2010-03-24 19:00:40