Sql-Server
“當連接關閉並返回池時,保留最後一個 SET TRANSACTION ISOLATION LEVEL 語句的隔離級別”?
MSDN 線上文章《SQL Server 中的快照隔離》指出:
- “隔離級別具有連接範圍的範圍,並且一旦使用 SET TRANSACTION ISOLATION LEVEL 語句為連接設置,它就會一直有效,直到連接關閉或設置另一個隔離級別。當連接關閉並返回池時,則保留上一個 SET TRANSACTION ISOLATION LEVEL 語句的隔離級別。重用池連接的後續連接使用在連接池時有效的隔離級別"
這不是自相矛盾的段落(“直到”與“保留”)嗎?
那麼,如果在關閉連接並返回池後“保留上一個SET TRANSACTION ISOLATION LEVEL語句的隔離級別”,應該怎麼理解:
- 預設隔離級別將具有任意值(池中的不同連接將具有不同的隔離級別,其值將取決於重新打開的連接)?
- 還是將池中所有連接的所有預設值更改為最後一個?但在手之前又完全不為人知?
來自池的連接將具有由最後一個使用該連接的客戶端設置的隔離級別。是的,真的有那麼可怕。
READ COMMITTED
總而言之,如果您更改連接的隔離級別,則必須在關閉之前將其顯式設置回。更好的是在任何批處理開始時明確聲明您所需的隔離級別,以確保您的程式碼不會受到其他人馬虎的影響,並在最後將其恢復為預設值。這種行為雖然令人費解,但顯然是設計使然。