防止存储过程同时执行两次

Fra*_*k V 7 sql-server stored-procedures sql-server-2000

我有一个SQL Server 2000的存储过程,只能在任何给定时刻执行单个实例.有没有办法检查并确保程序当前没有执行?

理想情况下,我希望代码能够自包含且高效(快速).我也不想做一些像创建全局临时表来检查它是否存在的事情,因为如果程序由于某种原因失败,它将始终被视为正在运行...

我搜索过,我认为还没有被问过.如果是的话,抱歉.

Mla*_*dic 10

是的,有办法.使用所谓的SQL Server应用程序锁.

编辑:是的,这也适用于SQL Server 2000.


JP *_*oto 5

您可以使用sp_getapplock sp_releaseapplock,如锁定存储过程仅供一次性使用中的示例所示.

但是,你真正想做的是什么?您是否尝试获得具有高隔离级别的事务?在应用程序级别处理这种类型的并发性可能会好得多,因为通常更高级别的语言对于那种事情具有更好的原语.