2016-11-24 33 views
1

我必須從過度更新的表中獲取數據。髒讀對我來說不是問題。我決定在我的存儲過程中使用未提交的讀取。正確的方式來恢復數據庫事務級別讀取未提交

然後我之前選擇加入這一行:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

我瞭解到,這個代碼範圍連接,不像NOLOCK。我聽說你應該在工作完成後將其改爲默認值,那對嗎?

我必須再補充該行的

SET TRANSACTION ISOLATION LEVEL READ COMMITTED 

結束了嗎?我在網上找不到任何例子,工作完成後隔離級別改回。有沒有例子?

+1

事務級的存儲過程裏面設置不會被調用者繼承。 – user2864740

回答

2

只有隔離級別選項中的一個可以一次設定,並保持設置爲連接,直到被明確改變。除非在語句的FROM子句中的表提示爲表指定了不同的鎖定或版本控制行爲,否則在事務內執行的所有讀操作都將按照指定隔離級別的規則運行。

...

如果發出事務隔離級別設置在存儲過程或觸發器,當對象返回控制的隔離級別復位到水平的影響被調用的對象時。例如,如果您在批處理中設置REPEATABLE READ,然後批處理會調用將隔離級別設置爲SERIALIZABLE的存儲過程,則當存儲過程將控制權返回給批處理時,隔離級別設置將恢復爲REPEATABLE READ。

https://msdn.microsoft.com/en-us/library/ms173763.aspx

相關問題