【问题标题】:What is the scope of using SQL Server's "set transaction isolation level read uncommitted"SQL Server的“设置事务隔离级别读取未提交”的使用范围是什么
【发布时间】:2014-08-10 15:51:08
【问题描述】:

我想问一下如何使用

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

在 SQL Server 2008 中。

我在 Winforms 中有一个系统,它通过选择查询从数据库中获取一些数据。

当我在 C# 代码的选择查询中使用此语句时,它会影响将在之后运行的其他选择查询吗?我应该以某种方式重置此语句,如果是,我该如何重置它?我应该使用

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

在我使用 READ UNCOMMITTED 语句的每个查询之后?

我希望此语句仅与我需要的特定查询相关。

【问题讨论】:

  • 来自易于找到的 msdn 页面:“控制由与 SQL Server 的连接发出的 Transact-SQL 语句的锁定和行版本控制行为。”范围是当前连接。来自线程池的线程上的连接可能有问题。
  • 那我有办法控制它吗?

标签: sql sql-server


【解决方案1】:

documentation 中与作用域相关的部分:

  • 一次只能设置一个隔离级别选项,并且在显式更改之前一直为该连接设置。
  • 如果您在存储过程或触发器中发出 SET TRANSACTION ISOLATION LEVEL,则当对象返回控制权时,隔离级别将重置为调用对象时有效的级别。
  • 用户定义函数和公共语言运行时 (CLR) 用户定义类型无法执行 SET TRANSACTION ISOLATION LEVEL。

所以是的。它将“影响将在之后运行的其他选择查询”。您应该将 ISOLATION LEVEL 改回来或使用 table hints 仅针对该特定查询:

SELECT Column1 FROM Table1 WITH (READUNCOMMITTED) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多