8

我正在实现内部没有事务的存储过程。实际上,它会,但仅在特定地点将时间减少到最低限度。存储过程的性质是我一次只想要一个运行。

我尝试使用 sp_getapplock 但很快发现它需要在事务内部。

有没有其他选择可以锁定整个过程但不将其包装到事务中?

4

1 回答 1

15

通过 @LockOwner 传入 Session 以获得 Session 范围的锁;获取锁定时,这不需要事务处于活动状态。

例如

EXEC @res = sp_getapplock @Resource = 'Lock ID', @LockOwner = 'Session', @LockMode = 'Exclusive';
..
code
..

EXEC @res = sp_releaseapplock @Resource = 'Lock ID';
于 2012-07-17T23:14:42.347 回答