簡體   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