0
我有一种情况,我需要从表中选择一些记录,将这些记录的主键存储在临时表中,并按顺序对记录应用排它锁以确保没有其他会话处理这些记录。我使用锁定提示完成了这个操作:SQL Server:锁定select语句返回的所有记录
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
问题是还有很多记录被锁定而不是必要的。我只想只有锁定实际插入到临时表中的记录。我最初在表上设置了一个标志来指示该记录正在使用中(与使用锁提示相反),但这有问题,因为如果情况阻止了一个或多个记录的处理,数据库将处于无效状态。