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

エラーはかなり明確です: あなたはリソースで applock を取得しませんでした89999。への呼び出しでもSession(パラメータの値として)指定する必要があり、ロックの解放はロックの取得と同じセッションで発生する必要があります。別の考えられる原因は、不均衡な取得/解放呼び出しです (余分な解放があります)。@LockOwnersp_releaselock

補足として、Session スコープのロックを使用する場合、トランザクションは必要ありません。

于 2013-02-19T08:29:31.197 に答える