没有事务的sp_getapplock

kat*_*tit 6 t-sql sql-server locking sql-server-2008-r2

我正在实现内部没有事务的存储过程.实际上,它会,但只在特定点上将时间减少到最小.存储过程的本质是这样的,我一次只想要一个runinng.

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

有没有其他的替代方案,我可以锁定整个程序,但没有包装成交易?

iru*_*var 11

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

例如

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

EXEC @res = sp_releaseapplock @Resource = 'Lock ID';
Run Code Online (Sandbox Code Playgroud)

  • 我相信您在发布时也必须提供“@LockOwner”?至少我做到了,否则我会收到错误“语句或函数必须在用户事务的上下文中执行。”。即使用`EXEC @res = sp_releaseapplock @Resource = 'Lock ID', @LockOwner = 'Session';` (2认同)