sp_getapplock 无事务

问题描述 投票:0回答:1

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

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

是否有其他选择可以对整个过程加锁,但不将其包装到事务中?

sql-server t-sql locking sql-server-2008-r2
1个回答
16
投票

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

例如

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

EXEC @res = sp_releaseapplock @Resource = 'Lock ID', @LockOwner = 'Session';
© www.soinside.com 2019 - 2024. All rights reserved.