首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLServer可防止两个进程之间出现锁定问题

问SQLServer可防止两个进程之间出现锁定问题
EN

Stack Overflow用户
提问于 2017-09-14 23:04:30
回答 1查看 42关注 0票数 0

我正在尝试将SQL Server表用作消息队列。一个进程将批量插入到表中。第二个是查询表,并在处理行之后删除行。

我的问题是:如果inserts和select/delete事务生成行级锁,我如何最好地避免两个进程之间的锁定问题?

EN

回答 1

Stack Overflow用户

发布于 2017-09-14 23:28:33

我会调查sp_getapplock和sp_releaseapplock。然后,两个进程都会尝试获取同一指定@Resource上的锁。

基本示例:

代码语言:javascript
复制
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

;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46222536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档