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