【问题标题】:Get the handle of the currently executing stored procedure获取当前正在执行的存储过程的句柄
【发布时间】:2016-06-07 02:58:29
【问题描述】:

我正在寻找一种方法来确定存储过程的特定实例是否正在运行。

例如,假设我有一个过程 foo,它已知会运行很长时间。我将 foo 作为进程 A 的一部分启动,稍后再启动一个单独的 foo 实例作为进程 B 的一部分。(该进程可以是启动该存储过程的任何外部事物。)

稍后,我希望能够查看 foo 是否正在运行,但我想具体查看在进程 A 下启动的 foo 实例是否仍在运行。

我已经看到了许多用于检查存储过程的任何实例是否正在运行的解决方案,但没有看到任何关于特定实例的内容。

这就是我希望的魔术假代码:

CREATE PROCEDURE foo
AS
BEGIN
    INSERT INTO fooWorkLog (handle)
    VALUES (@@MagicValueTellingMeTheSpecificHandleOfThisInstanceOfTheSproc)

    -- do other stuff
END

-- One Process does this

EXEC foo --let's say we know this has handle 123

-- Meanwhile another process does this

EXEC foo --let's say we know this has handle 789

-- A little bit later, from a different process
DECLARE @TheHandleImLookingFor INT = 123
SELECT ActiveHandle FROM SqlServersListOfActiveHandles
WHERE ActiveHandle = @TheHandleImLookingFor

有什么想法吗?

更多信息

以下 SO 帖子与我要问的类似 Check if stored procedure is running

但是,除非我弄错了,否则该解决方案会告诉您 sproc 正在运行,但它不会告诉我正在运行的 sproc 实例是否是在特定上下文中执行的实例。

使用他们的解决方案,假设我从一个上下文 (A) 启动了一个存储过程,然后从另一个上下文 (B) 再次启动了存储过程。一段时间后,假设这两个实例中只有一个仍在运行。如果我按照另一篇文章中的示例进行操作,它会告诉我 sproc 确实当前正在运行,但它不会告诉我它是来自上下文 A 的 sproc 还是来自上下文 B 的 sproc。

我可能弄错了,但我认为每次 sql server 执行存储过程时,它都会为每个实例提供某种句柄 ID。我想知道是否有一种方法可以识别 sproc 正在运行的句柄并将该句柄存储在某个表中以供参考。

如果我还不清楚,我可以用另一个例子再试一次。

【问题讨论】:

  • 您可以使用新的 guid(),它在插入时是独一无二的,并在 2 个进程之间提供了明确的分隔
  • 给出更多细节问题不清楚。
  • @sandeeprawat 我已经添加了更多解释,但可能还不清楚。如果你想要一个更好的例子,请告诉我。

标签: sql sql-server sql-server-2008 tsql stored-procedures


【解决方案1】:

我真的不知道如何获取过程句柄,但您的解决方法是编写自己的控件。

如果您有一个表来存储流程信息,比如说“tb_ProcedureControl”,您可以在流程开始时插入一条记录,然后在流程结束时设置结束日期。

例如:

CREATE PROCEDURE MyProc
   @param1...
  ,@param2...
  ,@InstanceInfo = NULL --Optional parameter
AS
BEGIN
   --create the record for the instance
   INSERT INTO tb_ProcedureControl (InstanceInfo, Start, End) VALUES (@InstanceInfo, getdate(), null)   


    <TASK TO DO>

   --set the end of the process
   UPDATE tb_ProcedureControl SET End = GETDATE()
   WHERE InstanceInfo = @InstanceInfo

END

【讨论】:

    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多