SQL Server sp_getapplock AND sp_releaseapplock在释放锁定时抛出异常

Edw*_*ard 3 sql-server locking

我正在使用SQL Server的锁定功能,如下所示

sp_getapplock
sp_releaseapplock
Run Code Online (Sandbox Code Playgroud)

我指定了 @LockOwner = 'Session'

但每次都抛出以下异常:

com.microsoft.sqlserver.jdbc.SQLServerException:无法释放应用程序锁(数据库主体:'dbo',资源:'89999'),因为它当前未被保存

欢迎任何建议或想法!

问候!

CREATE PROCEDURE [SETLOCK]
    @...
AS
DECLARE
@RESULT INT;
BEGIN TRANSACTION
EXEC @RESULT = sp_getapplock @...
                 @LockOwner = 'Session';

IF @RESULT = -3
BEGIN
    ROLLBACK TRANSACTION;
END;
ELSE
BEGIN
    COMMIT TRANSACTION;
END;
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 5

错误非常明显:您没有获得资源上的applock 89999.您必须在调用中指定Session(作为@LockOwner参数的值),sp_releaselock并且锁定释放必须在与锁定获取相同的会话中发生.另一个可能的原因是不平衡的获取/释放呼叫(您有额外的释放).

作为旁注,使用会话范围锁时不需要事务.