[英]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.