没有事务的sp_getapplock

时间:2012-07-17 23:03:57

标签: sql-server tsql locking sql-server-2008-r2

我正在实现内部没有事务的存储过程。实际上,它会,但只在特定点上将时间减少到最小。存储过程的本质是如此我只想一次运行一次。

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

还有其他替代方案,我可以锁定整个程序,但不将其包装到交易中吗?

1 个答案:

答案 0 :(得分:10)

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

例如

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

EXEC @res = sp_releaseapplock @Resource = 'Lock ID';