今天,当我看到以下结构时,我一直在查看我们系统上的一些存储过程:
(伪代码表示实际SP,服务器使用默认隔离级别):
CREATE PROCEDURE ...
AS
BEGIN
IF NOT EXISTS(SELECT ...)
BEGIN
RETURN;
END
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
DML...
DML...
DML...
COMMIT
END
我还没有看到在事务边界内声明事务隔离级别,我想知道它的效果是什么?
提交事务后是否恢复隔离级别(因此,如果提交后有其他语句 - 它们的隔离级别是什么)?
在这种情况下,我认为如果在事务开始之前声明隔离级别不会有任何区别。是这样吗?
大多数情况下,我看到这一点有点吃惊,因为我只见过在事务之外声明事务隔离,而不是在事务内部,我想知道 - 为什么?这样做有什么好处。