查看当前正在运行的过程的参数值?

时间:2014-11-21 23:46:35

标签: tsql parameters

使用Transact SQL

只是好奇,有没有办法查看当前正在运行的proc的参数值(也就是执行proc的EXEC行?)?

示例,我运行: EXEC HelloWorld @SQL = 1

当proc仍在运行时,是否有表或日志或任何我可以查看的内容,并且看到@SQL = 1?

3 个答案:

答案 0 :(得分:2)

无法从动态的函数视图中获取参数值。但在您的情况下,我建议您在程序中使用以下代码:

declare @SQL int = 1
raiserror('@SQL = %i',0,0,@SQL) WITH NOWAIT

WITH NOWAIT非常重要。这些单词不会像您使用print

那样等待信息

答案 1 :(得分:2)

当一个过程正在运行时,您可以在另一个窗口中执行DBCC INPUTBUFFER命令。您需要知道正在执行HelloWorld过程的SPID。

如果您在SQL Server Management Studio中运行HelloWorld,则可以看到窗口最底部状态栏上显示的SPID。我的IDE在状态栏上显示6个面板。第3个面板在括号中显示带有SPID的登录名。示例" YourDomain \ YourLogin(59)"。 59是您正在寻找的SPID。

如果您没有在SQL Server Management Studio中运行查询并且没有随时可用的SPID,则可以执行以下命令:

sp_who2

这将显示一个结果集,其中包含与SQL Server实例的每个连接的行。任何低于50的SPID都代表一个内部流程。大于50的任何内容都是用户连接。根据您在此结果集中看到的信息,希望您能够确定正在执行HelloWorld的SPID。

一旦知道了SPID,就可以通过在新的查询窗口中发出以下命令来查看当前正在执行的命令。

DBCC INPUTBUFFER(59)

您需要将上面的59替换为您之前确定的实际SPID。执行上面的命令将显示当前正在执行的命令,包括参数值。

答案 2 :(得分:2)

获取传递给procs的参数值的最佳方法,特别是远程执行时,是通过SQL Server Profiler或扩展事件。如果使用SQL Server Profiler,则需要捕获以下事件:

  • (在存储过程中)
    • RPC:已完成
    • SP:已完成
  • (在TSQL中)
    • SQL:BatchCompleted

你会看到" TextData"中的值。字段(因此您需要为所有这3个事件选择该列)。