2009-07-29 45 views
6

我有一個SQL Server 2000存儲過程,它只能在任何給定時刻執行一個實例。有什麼方法可以檢查並確保程序目前不在執行中嗎?防止同時執行兩次存儲過程

理想情況下,我希望代碼是自包含和高效(快速)。我也不想做一些事情,比如創建一個全局臨時表來檢查它是否存在,因爲如果程序由於某種原因失敗了,它總會被視爲正在運行...

我已經搜索過了,我認爲這還沒有被問到。如果它已經,對不起。

+0

你正在使用哪個版本的sql-server? – 2009-07-29 21:08:52

+0

我更新了帖子。抱歉。 – 2009-07-29 21:11:04

回答

1

如何鎖定虛擬表?如果發生故障,這不會造成死鎖。

+0

我看不出這將如何幫助以任何方式。你能詳細說明嗎? – 2009-07-29 21:17:02

0

在該過程檢查的開始,如果數據的件被「鎖定」,如果不將其鎖定

在過程的結束解鎖片數據。

SELECT @IsLocked=IsLocked FROM CheckLockedTable Where spName = 'this_storedProcedure' 

IF @IsLocked = 1 
    RETURN 
ELSE 
    UPDATE CheckLockedTable SET IsLocked = 1 Where spName = 'this_storedProcedure' 

. 
. 
. 

-- At end of Stored Procedure 
    UPDATE CheckLockedTable SET IsLocked = 0 Where spName = 'this_storedProcedure' 
+0

我該如何做到這一點? – 2009-07-29 21:10:03