none
T-SQL With (Nolock)會查詢出來的資料會遺漏? RRS feed

  • 問題

  • Hi 各位先進好

    最近在MSSQL 2000實務上遇到一個問題,敘述如下,希望跟各位討論看看:

    資料表約100多萬筆資料,設定的查詢條件,正常狀況下可以查出 筆歷史資料 (n > m > 0)

    如: 

    SELECT * FROM ATbl  WHERE a=xxx and b=yyy

    但我偶然間發現,有個人用With nolock查詢,結果只撈出 n-m 筆資料;同樣的查詢語法、條件,重新試了幾次之後,撈出的資料又變成 n 筆了。也就是說正常該撈出 10 筆資料,卻只撈出3筆,重複查詢幾次後又恢復成 10 筆

    SELECT * FROM ATbl WITH (NOLOCK) WHERE a=xxx and b=yyy

    對於這樣的狀況,我百思不得其解,執行sp_who2,也沒見到有東西在吃資源、或是有lock的狀態,而且查詢的資料,都是歷史資料,不會有人再去對它做Update.... 

    我知道With nolock沒辦法保證資料的正確性,但完整性是否也同樣無法保證呢


    無拘無束的程式設計師


    2013年10月4日 上午 03:54

所有回覆