我正在寻找一种方法来识别存储过程的特定实例是否正在运行。获取当前正在执行的存储过程的句柄
例如,假设我有一个程序foo,它已知可以运行很长一段时间。我开始将foo作为进程A的一部分,稍后稍后启动另一个foo实例作为进程B的一部分。(该进程可能是启动该存储过程的任何外部事件。)
稍后,我想要能够看到foo是否正在运行,但我想特别看看在进程A下启动的foo实例是否仍在运行。
我见过很多解决方案来检查存储过程的任何实例是否正在运行,但是没有看到有关特定实例的任何信息。
这里的kindof是我在魔术fakey代码希望:
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的实例是否是在特定上下文中执行的实例。
使用他们的解决方案让我们说,如果我从一个上下文(A)开始一个sproc,然后从另一个上下文(B)再次启动sproc。一段时间后,让我们说,这两个实例中只有一个仍在运行。如果我按照另一篇文章的例子,它会告诉我,该sproc确实正在运行,但它不会告诉我它是上下文A中的sproc还是上下文B中的sproc。
我可能会误认为,但我想每次SQL服务器执行一个存储过程,它给每个实例一个处理ID。我想知道是否有一种方法可以识别sproc正在运行的句柄,并将该句柄存储在某个表中供参考。
如果我还没有清楚,我可以再试一遍另一个例子。
你可以使用新的GUID(),它是独一无二的,当插入并给予2个工序之间明确分工 – Ajay2707
提供一些更多的细节问题尚不清楚。 –
@sandeeprawat我已经添加了一些更多的解释,但可能还不清楚。让我知道你是否想要一个更好的例子。 – Joe