从未提交读取恢复数据库事务级别的正确方法

时间:2016-11-24 07:05:46

标签: sql sql-server

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

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

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

我了解到这个代码范围是连接,与nolock不同。我听说你的工作完成后应该把它改成默认值吗?

我必须添加

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

结束了?在工作完成后,我在网上找不到隔离级别更改的任何示例。有什么例子吗?

1 个答案:

答案 0 :(得分:2)

  

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

     

...

     

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

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