簡體   English   中英

從用已讀提交的IsolationMode鎖定的SQL Server表中選擇所有行

[英]Selecting all rows from a SQL Server table locked with the readcommited IsolationMode

我的一個客戶會話從事務在表中創建一個條目並繼續其處理。 事務在read committed的隔離模式下運行。 同時,另一個客戶端會話報告表中的所有數據。

由於鎖定行(由其他客戶端插入),因此全選操作現在已完全鎖定。

如何在全選期間檢索提交的數據,而不是完全鎖定?

任何幫助將不勝感激。

您尚未真正確定使用場景的具體細節,但是有可能從表中取出數據,但有一些嚴重的警告

您可以使用marc_s所說的READ UNCOMMITTED快照隔離級別,其作用WITH (NOLOCK)在事務中所有select語句上使用WITH (NOLOCK)作用相同。 如果您只想讀取該表,但通常會處理事務中的所有其他讀取,那么最好將NOLOCK提示放在查詢中的特定表上。 因此,例如:

SELECT *
  FROM firstTable f INNER JOIN
       secondTable s WITH (NOLOCK) on f.Key = s.Key

這將為firstTable發出普通的讀取鎖,但secondTable帶任何鎖讀取secondTable 沒有鎖會非常危險-因為您可以有效地破壞數據。 如果執行插入操作會重新排序數據並導致頁面拆分,那么您可以兩次退出同一行,並且會遇到各種類似的不愉快情況。

因此有可能,但這並不理想,因此您應警惕這種效果 傑森·斯特拉特(Jason Strate)提供了一些不錯的進一步閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM