2016-06-07 52 views
0

我正在尋找一種方法來識別存儲過程的特定實例是否正在運行。獲取當前正在執行的存儲過程的句柄

例如,假設我有一個程序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正在運行的句柄,並將該句柄存儲在某個表中供參考。

如果我還沒有清楚,我可以再試一遍另一個例子。

+0

你可以使用新的GUID(),它是獨一無二的,當插入並給予2個工序之間明確分工 – Ajay2707

+0

提供一些更多的細節問題尚不清楚。 –

+0

@sandeeprawat我已經添加了一些更多的解釋,但可能還不清楚。讓我知道你是否想要一個更好的例子。 – Joe

回答

0

我真的不知道熱得到程序句柄,但對你來說一個解決方法是寫你自己的控制。

如果您有一個表來存儲過程信息,可以說「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 
相關問題