繁体   English   中英

SQL Server:锁定由select语句返回的所有记录

[英]Sql Server: Lock all records returned by select statement

我遇到一种情况,我需要从表中选择一些记录,将这些记录的主键存储在临时表中,并对这些记录应用排他锁,以确保没有其他会话处理这些记录。 我通过锁定提示来完成此操作:

begin tran
insert into #temp
select pk from myTable with(xlock)
inner join otherTables, etc
(Do something with records in #temp, after which they won't be candidates for selection any more)
commit

问题在于,更多的记录被锁定,超出了必要。 只想锁定实际插入到临时表中的记录。 我最初是在表上设置一个标志以指示该记录正在使用中(而不是使用锁定提示),但这存在问题,因为如果情况阻止处理一个或多个记录,数据库将处于无效状态。

也许正在设置其他隔离级别并使用行锁表提示是您要寻找的东西?

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

WITH (ROWLOCK)

也许结合使用XLOCK和ROWLOCK可能会成功?

该文件说:

XLOCK

指定要获取并持有排他锁,直到事务>完成。 如果用ROWLOCK,PAGLOCK或TABLOCK指定,则排他锁适用于适当的粒度级别。

我自己还没有尝试过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM