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
;