0

我正在创建一个存储过程,我不希望通过脚本进行任何锁定。我确信我需要在脚本的开头声明“SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”。但我不确定如何在声明之后开始。Microsoft 的一个示例显示以“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:如何为整个存储过程设置默认隔离级别?

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
4

1 回答 1

1

两种说法都可以

存储过程中的事务范围,来自 MSDN

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

于 2017-06-11T21:09:18.790 回答