我是否在 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 之后添加已提交的读取?

CFN*_*nja 9 t-sql transaction isolation-level

在存储过程中,我有以下内容:( sql server 2008 )

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH
Run Code Online (Sandbox Code Playgroud)

由于这是基于事务的,我认为其余的数据库连接不会受到 SERIALIZABLE 的影响。

我是否需要隐式设置隔离级别以在提交后读取已提交?这是否会对我的应用程序服务器和数据库服务器之间的其他连接产生不利影响?

Eri*_*ing 6

命令是TRANSACTION ISOLATION LEVEL,不是SERVER ISOLATION LEVEL。它只更改事务范围的隔离级别。


Sql*_*ide 5

不,您不必将隔离级别隐式设置回已提交的读取。

网上书籍。

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