2017-09-14 77 views
0

我試圖使用SQL Server表作爲消息隊列。 一個進程向表中執行批量插入。 第二個查詢表並刪除正在處理的行。SQLServer防止兩個進程之間的鎖定問題

我的問題是:如果插入和選擇/刪除事務生成行級鎖,我怎樣才能最好地避免兩個進程之間的鎖定問題?

回答

0

我想看看sp_getapplocksp_releaseapplock。這兩個進程然後會嘗試獲取同一個指定@Resource的鎖。

基本例如:

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 

;