如何获取dm_exec_sql_text的参数值

Ted*_*ott 10 sql-server sql-server-2005 sql-server-2008

我正在运行以下语句来查看在sql server中执行的查询:

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

返回的sql文本是参数化的:

(@Parm0 int) select * from foo where foo_id = @Parm0
Run Code Online (Sandbox Code Playgroud)

有没有办法获取该语句正在使用的参数的值?也许加入另一张桌子说?

And*_*rew 6

编辑: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>') 
Run Code Online (Sandbox Code Playgroud)

你会发现查询计划的最后一列是query_plan,你可以手动检查的查询计划的xml版本,在XML的底部是参数,或者你喜欢挑战使用XML解析和XQuery拉出来ParameterList标签

  • 我认为这些是计划生成期间嗅探的参数,而不是最后使用的参数. (4认同)