Какова область изоляции вложенных транзакций в SQL Server?

StackOverflow https://stackoverflow.com/questions/223436

  •  03-07-2019
  •  | 
  •  

Вопрос

Рассмотрим следующий 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.Правильно ли это?

Это было полезно?

Решение

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

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

  

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

Другие советы

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

Если вы устанавливаете УРОВЕНЬ ИЗОЛЯЦИИ ТРАНЗАКЦИИ в хранимой процедуре или триггере, когда объект возвращает управление, уровень изоляции сбрасывается до уровня, действовавшего при вызове объекта.Например, если вы задаете ПОВТОРЯЕМОЕ ЧТЕНИЕ в пакете, и пакет затем вызывает хранимую процедуру, которая устанавливает уровень изоляции в СЕРИАЛИЗУЕМОЕ, параметр уровня изоляции возвращается к ПОВТОРЯЕМОМУ ЧТЕНИЮ, когда хранимая процедура возвращает управление пакету.

Итак, суть здесь в том, что УСТАНОВЛЕННЫЙ УРОВЕНЬ ИЗОЛЯЦИИ ТРАНЗАКЦИИ имеет сходство с процедурой, не сходство с транзакцией (как я и думал).

Потрясающе!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top