如何获取执行中的存储过程的参数值?

J.D*_*.D. 12 sql-server stored-procedures dmv sql-server-2016

有没有办法在存储过程正在执行过程中获取传递给存储过程的参数的值?(我正在尝试调试一个正在运行的存储过程。)

我知道我可以看到当前正在使用 sys.dm_exec_requests 和 sys.dm_exec_sql_text DMV 执行的存储过程的查询,但它们没有显示正在使用的参数的值。

Mar*_*ith 15

对于 SQL Server 2016,您需要使用跟踪标志 7412 或扩展事件会话捕获提前启用查询分析基础结构query_thread_profile(并且至少在 SQL Server 2016 SP1 上),然后可以使用

WITH XMLNAMESPACES
   (DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
select query_plan.query('//ParameterList')
from sys.dm_exec_query_statistics_xml(@session_id)
Run Code Online (Sandbox Code Playgroud)

并从正在执行的语句的执行计划中查看ParameterRuntimeValueParameterCompiledValue

对于 SQL Server 2019+,基础结构默认启用,因此上述内容将正常工作。

这可能不是存储过程的所有参数,但是因为它只包括执行计划使用的参数。