Какова область изоляции во вложенных транзакциях в SQL Server? - PullRequest
6 голосов
/ 22 октября 2008

Рассмотрим следующий SQL:

BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

INSERT Bands
    (  Name  )
SELECT 'Depeche Mode'
UNION
SELECT 'Arcade Fire'

    -- I've indented the inner transaction to make it clearer.

    BEGIN TRAN
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT *
      FROM Bands

    COMMIT

-- What is the isolation level right here?

UPDATE Bands
   SET Name = 'Modest Mouse'
 WHERE Name = 'Oddest House'

COMMIT

В итоге мы запускаем транзакцию и устанавливаем уровень ее изоляции READ COMMITTED. Затем мы делаем некоторый случайный SQL и запускаем другую вложенную транзакцию. В этой транзакции мы изменяем уровень изоляции на READ UNCOMMITTED. Затем мы фиксируем эту транзакцию и возвращаемся к другой.

Теперь я предполагаю, что после внутренней фиксации уровень изоляции возвращается к READ COMMITTED. Это правильно?

Ответы [ 2 ]

7 голосов
/ 22 октября 2008

Вы [Боб Пробст] правы. Интересно, что согласно документации вы связались:

Если вы выполняете команду SET TRANSACTION ISOLATION LEVEL в хранимой процедуре или триггере, когда объект возвращает управление, уровень изоляции сбрасывается до уровня, действующего при вызове объекта. Например, если вы установили REPEATABLE READ в пакете, а затем пакет вызывает хранимую процедуру, которая устанавливает уровень изоляции SERIALIZABLE, параметр уровня изоляции возвращается к REPEATABLE READ, когда хранимая процедура возвращает управление пакету.

Итак, суть здесь в том, что SET TRANSACTION ISOLATION LEVEL имеет сходство процедур , а не сходство транзакций (как я думал).

Awesome!

7 голосов
/ 22 октября 2008

Я не думаю, что это правильно.

См. Примечания здесь: Установить транзакцию

только один уровень изоляции параметры могут быть установлены одновременно, и это остается установленным для этого соединения до это явно изменено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...