2016-11-06 15 views
0

在存儲過程中,插入/更新後跟一個select(nolock)是否可以產生具有相同數據的意外結果?

可以插入/更新,然後在同一條記錄上選擇(nolock)會產生意外的結果嗎?

我是否總是得到(完整)更新/插入記錄?

在此先感謝您的幫助!

+1

如果你在意爲什麼要使用'NOLOCK'提示? –

+0

防止(b)鎖定,但我們注意到一段時間內會出現一些奇怪的結果。有很多併發線程,都在獨特的記錄上運行(新的或更新的) – Gerard

+0

NOLOCK掃描期間的並行插入/更新活動可能導致行被遺漏或重複。最好打開READ_COMMITTED_SNAPSHOT數據庫選項,除非應用程序依賴於悲觀鎖定。 –

回答

0

如果一切都通過單個進程完成,那麼數據將是正確的。 但是,如果存儲過程是從不同的進程ID調用的,並且用戶在其他進程中正在執行select(nolock),那麼select可能會發生數據差異。

由於存儲過程可能仍在使用中。

+0

Thx Signh!有很多併發線程,都在獨特的記錄上運行(新的或更新的)。仍然沒有問題? – Gerard

+0

理想情況下,nolock不應該使用讀取,但是如果您將結果集繪製成圖形或儀表板,並且您可以在顯示胎面時承擔一些差異,那麼您可以使用nolock。 –

相關問題