sql-server – 事务隔离级别范围

SQL Server 2005中事务隔离级别的作用域规则是什么?我知道不同级别的意思,但不知道如何在手动运行脚本之外正确应用它们。我在生产质量代码中找不到实际使用指南。

显然,范围从你使用这样的命令开始:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

但它在哪里结束?如果我在存储过程中设置iso级别,然后该proc调用另一个,嵌套的proc是继承吗?更好的是,如果我升级iso级别在嵌套的proc内部是否会进入调用proc?像BEGIN TRAN,ROLLBACK和COMMIT这样的事务命令有什么区别吗?

当应用程序或代理作业调用存储的proc时,隔离级别更改是以某种方式持续的吗?在每次处理结束时,我总是必须恢复到默认的READ COMMITTED状态吗?

我会在不同的情况下测试它,但我不知道如何读取当前的隔离级别设置。

运行以下代码并自行查看:

CREATE PROCEDURE dbo.KeepsIsolation
AS
BEGIN
PRINT 'Inside sproc that does not change isolation level';
DBCC USEROPTIONS;
END
GO

CREATE PROCEDURE dbo.ChangesIsolation
AS
BEGIN
PRINT 'Inside sproc that changes isolation level';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DBCC USEROPTIONS;
END
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
DBCC USEROPTIONS;
EXEC dbo.KeepsIsolation;
DBCC USEROPTIONS;
EXEC dbo.ChangesIsolation;
-- demonstrates that isolation level restored to REPEATABLE READ after exiting the procedure
    DBCC USEROPTIONS;
http://stackoverflow.com/questions/1045634/transaction-isolation-level-scopes

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:sql-server – 事务隔离级别范围