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
問題是還有很多記錄被鎖定而不是必要的。我只想只有鎖定實際插入到臨時表中的記錄。我最初在表上設置了一個標誌來指示該記錄正在使用中(與使用鎖提示相反),但這有問題,因爲如果情況阻止了一個或多個記錄的處理,數據庫將處於無效狀態。