【问题标题】:does the isolation type get overridden by the calling procedure?隔离类型是否被调用过程覆盖?
【发布时间】:2017-05-03 21:40:53
【问题描述】:

我有一些 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

更改父事务中的隔离级别有什么影响?

【问题讨论】:

    标签: sql .net sql-server visual-studio tsql


    【解决方案1】:

    在存储过程执行范围内指定的事务隔离级别将在 proc 执行期间优先于当前会话隔离级别。与 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
    

    【讨论】:

      【解决方案2】:

      来自 MSDN:

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

      但是,正如@HABO 指出的那样:

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

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

      【讨论】:

      • 也来自参考文章:“如果您在存储过程或触发器中发出 SET TRANSACTION ISOLATION LEVEL,当对象返回控制时,隔离级别将重置为调用对象时有效的级别。例如,如果您在批处理中设置 REPEATABLE READ,然后批处理调用将隔离级别设置为 SERIALIZABLE 的存储过程,则当存储过程将控制权返回给批处理时,隔离级别设置将恢复为 REPEATABLE READ。"
      猜你喜欢
      • 1970-01-01
      • 2011-12-13
      • 2022-12-18
      • 2015-05-08
      • 2010-09-08
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2011-06-19
      相关资源
      最近更新 更多