SET TRANSACTION ISOLATION LEVEL存储过程的范围

时间:2012-10-23 16:37:34

标签: sql-server-2008 stored-procedures

我正在创建一个存储过程,我不希望通过脚本进行任何锁定。我确信我需要在脚本的开头说明“SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”。但我不确定如何在声明之后开始。微软的一个例子表明,以“BEGIN TRANSACTION”开头,以“END TRANSACTION”结束。在“SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”之后,有人在没有任何BEGIN和END语句的情况下启动。请建议我使用“SET TRANSACTION ISOLATION LEVEL”语句来实现我的目标。

http://msdn.microsoft.com/en-us/library/aa259216(v=sql.80).aspx

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
GO
BEGIN TRANSACTION
SELECT * FROM publishers
SELECT * FROM authors
...
COMMIT TRANSACTION

SQL Server: how to set default isolation level for the entire stored procedure?

BEGIN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
 -- will a transaction level for a atomic transaction created by SQL Server for this statement be READ COMMITTED 
SELECT * FROM T
END

1 个答案:

答案 0 :(得分:1)

两个陈述都没问题

Transaction scope in a stored procedure, from MSDN

  

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