0
我試圖使用SQL Server表作爲消息隊列。 一個進程向表中執行批量插入。 第二個查詢表並刪除正在處理的行。SQLServer防止兩個進程之間的鎖定問題
我的問題是:如果插入和選擇/刪除事務生成行級鎖,我怎樣才能最好地避免兩個進程之間的鎖定問題?
我試圖使用SQL Server表作爲消息隊列。 一個進程向表中執行批量插入。 第二個查詢表並刪除正在處理的行。SQLServer防止兩個進程之間的鎖定問題
我的問題是:如果插入和選擇/刪除事務生成行級鎖,我怎樣才能最好地避免兩個進程之間的鎖定問題?
我想看看sp_getapplock和sp_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
;