我正在使用SQL Server的锁定功能,如下面的
sp_getapplock
sp_releaseapplock
我已指定@LockOwner = 'Session'
但每次都抛出以下异常:
com.microsoft.sqlserver.jdbc.SQLServerException:无法释放应用程序锁(数据库主体:'dbo',资源:'89999'),因为它当前未被保存
欢迎任何建议或想法!
REGARDS!
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;
答案 0 :(得分:5)
错误很明显:您没有获得资源89999
上的applock。您必须在调用sp_releaselock
时指定Session
(作为@LockOwner
参数的值),并且锁定释放必须在与锁定获取相同的会话中发生。另一个可能的原因是不平衡的获取/释放呼叫(你有一个额外的释放)。
作为旁注,使用会话范围锁时不需要事务。