我正在实现内部没有事务的存储过程。实际上,它会,但只在特定点上将时间减少到最小。存储过程的本质是如此我只想一次运行一次。
我尝试使用sp_getapplock但很快发现它需要在内部事务中。
还有其他替代方案,我可以锁定整个程序,但不将其包装到交易中吗?
答案 0 :(得分:10)
通过@LockOwner传递Session以获得会话范围锁定;当锁定时,这不需要事务处于活动状态。
例如
EXEC @res = sp_getapplock @Resource = 'Lock ID', @LockOwner = 'Session', @LockMode = 'Exclusive';
..
code
..
EXEC @res = sp_releaseapplock @Resource = 'Lock ID';