2009-07-29 144 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