2014-11-21 81 views
0

使用Transact SQL查看当前正在运行的程序的参数值?

只是好奇的是,有没有办法查看当前正在运行的进程中的proc参数值(又名,EXEC行运行以执行proc?)?

比如我经营: EXEC的HelloWorld @SQL = 1

是否有一个表或登录或什么我可以看看,而PROC仍在运行,看@SQL = 1?

+0

可能的重复[如何查看SQL Server 2008中当前运行的特效的参数](https://stackoverflow.com/questions/4649311/how-do-i-view-the-parameters-of-currently -running-procs-in-sql-server-2008) – 2017-11-06 20:40:29

回答

2

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

如果您在SQL Server Management Studio中运行HelloWorld,则可以在窗口最底部的状态栏上看到SPID。我的IDE在状态栏上显示6个面板。第三个面板在圆括号中显示带有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。执行上面的命令将显示当前正在执行的命令,包括参数值。

+0

完美!谢谢。我非常熟悉SP_WHO2以及我们在这里运行的其他几个脚本和过程,以查找此类信息。但是这让我发疯,我实际上看不到执行的线路。这正是我所期待的。 我们有一些使用动态SQL在游标中执行其他过程的特效程序,所以当我问到这个问题时,我想要一个简单快捷的方法来检查类似的进程。我知道还有其他的方式,但这看起来最快,给我的只是我需要的东西。 – chadwin 2014-11-28 19:08:56

2

无法从函数的动态视图中获取参数值。但是,在你的情况,我可以推荐你使用你的程序中下面的代码:

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

WITH NOWAIT是非常重要的事情。用这些词不会等待如果您使用的信息print

2

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

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

您将在“TextData”字段中看到值(因此您需要为所有3个事件选择该列)。

相关问题