在 SQL 中更改隔离级别时的 SQL 连接行为

本文关键字:SQL 连接 隔离级 | 更新日期: 2023-09-27 18:32:45

根据 http://msdn.microsoft.com/en-nz/library/ms173763.aspx 的备注部分:

一次

只能设置一个隔离级别选项,并且在显式更改之前,该选项将保持为该连接的设置状态。

并根据 http://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx

为了最大限度地降低打开连接的成本,ADO.NET 使用了一种称为连接池的优化技术。

这是否意味着,如果在存储过程中更改了ISOLATION LEVEL,它将在下次使用连接时转移到其他连接? 例如

var con1 = new SqlConnection("<THE CONNECTION STRING>"); 
// ...call stored procedure altering isolation level with:
// SET TRANSACTION ISOLATION LEVEL SNAPSHOT
con1.Close();
var con2 = new SqlConnection("<THE CONNECTION STRING>"); 
// ... will this connection potentially have the altered isolation level?

编辑:有没有一种简单的方法来检查查询中使用的隔离级别?

在 SQL 中更改隔离级别时的 SQL 连接行为

到A部分...

不。

从文档中...

如果在存储过程中发出"设置事务隔离级别"或 触发器,当对象返回控制时,隔离级别被重置 到调用对象时生效的级别。例如,如果 您在批处理中设置可重复读取,然后批处理调用存储的 将隔离级别设置为"可序列化"的过程,即隔离 当存储过程时,级别设置将恢复为可重复读取 将控制权交还给 BATC