Sql 隔离类型是否被调用过程覆盖?

Sql 隔离类型是否被调用过程覆盖?,sql,.net,sql-server,visual-studio,tsql,Sql,.net,Sql Server,Visual Studio,Tsql,我有一些C#代码,在事务范围ReadCommitted内执行以下操作: using (var createTempTableCommand = new SqlCommand()) { createTempTableCommand.CommandText = createTempTableScript; createTempTableCommand.Connection = omnia

我有一些C#代码,在事务范围ReadCommitted内执行以下操作:

 using (var createTempTableCommand = new SqlCommand())
                {
                    createTempTableCommand.CommandText = createTempTableScript;
                    createTempTableCommand.Connection = omniaConnection;
                    createTempTableCommand.ExecuteNonQuery();
                }

                foreach (var command in listOfSqlCommands)
                {
                    using (var da = new SqlDataAdapter(command))
                    {
                        da.Fill(dtResults);
                    }
                }
上述代码将调用调用其他存储过程的存储过程,在该层次结构的某些级别上,事务隔离模式可以更改为:

set transaction isolation level serializable
更改父事务中的隔离级别有什么影响?来自MSDN:

一次只能设置一个隔离级别选项,并且在显式更改之前,该选项将一直为该连接设置

然而,正如@HABO所指出的:

如果在存储过程或触发器中发出SET TRANSACTION ISOLATION LEVEL,则当对象返回control时,隔离级别将重置为调用该对象时有效的级别


在过程执行期间,存储过程执行范围内指定的事务隔离级别将优先于当前会话隔离级别。与proc中的所有
SET
语句一样,该值将在proc执行后恢复为以前的设置。下面是一个T-SQL脚本,说明了这一点。这同样适用于TransactionScope

CREATE PROC dbo.Transaction_IsolationLevelExample
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
DBCC USEROPTIONS; 
GO

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DBCC USEROPTIONS; --shows READ COMMITTED
EXEC dbo.usp_test; --shows SERIALIZABLE
DBCC USEROPTIONS; --shows READ COMMITTED
GO

同样来自参考文章:如果在存储过程或触发器中发出SET TRANSACTION ISOLATION LEVEL(设置事务隔离级别),当对象返回control(控制)时,隔离级别将重置为调用对象时的有效级别。例如,如果在批中设置可重复读取,然后批调用将隔离级别设置为可序列化的存储过程,则当存储过程将控制权返回给批时,隔离级别设置将恢复为可重复读取。”