我正在尋找一種方法來識別存儲過程的特定實例是否正在運行。獲取當前正在執行的存儲過程的句柄
例如,假設我有一個程序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