2017-09-14 7 views
0

SQL Serverテーブルをメッセージキューとして使用しようとしています。 1つのプロセスがテーブルにバルク挿入を実行します。 2つ目は、テーブルをクエリし、処理された後に行を削除します。SQLServer 2つのプロセス間のロックの問題を防ぐ

私の質問は、挿入と選択/削除トランザクションが行レベルのロックを生成する場合、どのようにして2つのプロセス間のロックの問題を避けることができますか?

答えて

0

sp_getapplocksp_releaseapplockを調べます。両方のプロセスは、同じ指定された@Resourceでロックを取得しようとします。

Basicの例:

DECLARE @LockResult int = NULL 
; 

BEGIN TRAN MyTransaction 

-- Obtain Lock 

EXEC @LockResult = sp_getapplock 
    @Resource = 'MyResource', 
    @LockMode = 'Exclusive', 
    @LockTimeout = 10000 
; 

IF @LockResult IN (0, 1) 

    BEGIN 

     -- Your process 

     EXEC sp_releaseapplock @Resource = 'MyResource' 

     COMMIT TRAN MyTransaction 

    END 

ELSE 

    -- Handle failure to obtain lock 

; 
関連する問題