3

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

sp_getapplock
sp_releaseapplock

我已经指定@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;
4

1 回答 1

5

错误很明显:您没有在 resource 上获得 applock 89999。您还必须在调用中指定Session(作为参数的值),并且锁定释放必须发生在与锁定获取相同的会话中。另一个可能的原因是不平衡的获取/释放调用(你有一个额外的释放)。@LockOwnersp_releaselock

As a side note there is no need for a transaction when using Session scoped locks.

于 2013-02-19T08:29:31.197 回答