我正在实现内部没有事务的存储过程。事实上,它会,但仅限于特定地点,以将时间减少到最少。存储过程的本质是我一次只想运行一个。
我尝试使用 sp_getapplock 但很快发现它需要在事务内部。
是否有其他选择可以对整个过程加锁,但不将其包装到事务中?
通过@LockOwner传入Session来获取Session范围的锁;当锁定时,这不需要事务处于活动状态。
例如
EXEC @res = sp_getapplock @Resource = 'Lock ID', @LockOwner = 'Session', @LockMode = 'Exclusive';
..
code
..
EXEC @res = sp_releaseapplock @Resource = 'Lock ID', @LockOwner = 'Session';