【问题标题】:Proper way to restore database transaction level from read uncommitted从未提交读恢复数据库事务级别的正确方法
【发布时间】:2016-11-24 15:41:39
【问题描述】:

我必须从过度更新的表中获取数据。脏读对我来说不是问题。我决定在我的存储过程中使用未提交的读取。

然后我在选择之前添加了这一行:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

我了解到此代码范围是连接,与 nolock 不同。我听说你应该在工作完成后将其更改为默认值,对吗?

我必须添加吗

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

行尾?我在网络上找不到任何在工作完成后将隔离级别改回的示例。有例子吗?

【问题讨论】:

  • SPROC内部设置的事务级别不会被调用者继承。

标签: sql sql-server


【解决方案1】:

一次只能设置一个隔离级别选项,在明确更改之前,它会一直为该连接设置。事务中执行的所有读取操作都在指定隔离级别的规则下运行,除非语句的 FROM 子句中的表提示为表指定不同的锁定或版本控制行为。

...

如果您在存储过程或触发器中发出 SET TRANSACTION ISOLATION LEVEL,则当对象返回控制权时,隔离级别将重置为调用对象时有效的级别。例如,如果您在批处理中设置 REPEATABLE READ,然后批处理调用将隔离级别设置为 SERIALIZABLE 的存储过程,当存储过程将控制权返回给批处理时,隔离级别设置恢复为 REPEATABLE READ。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多