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

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

 НАЧАТЬ TRAN
 УСТАНАВЛИВАЙТЕ УРОВЕНЬ ИЗОЛЯЦИИ SET TRANSACTION COMMADTED

 ВСТАВКИ
     ( Имя )
 SELECT 'Depeche Mode'
 UNION
 SELECT 'Arcade Fire'

     - Я сделал внутреннюю транзакцию, чтобы сделать ее более ясной.

     НАЧАТЬ TRAN
     УСТАНОВИТЬ УРОВЕНЬ ИЗОЛЯЦИИ СТАВКИ

     ВЫБРАТЬ *
       ИЗ ГРУПП

     COMMIT

 - Каков уровень изоляции прямо здесь?

 UPDATE Bands
    SET Name = 'Modest Mouse'
  ГДЕ Имя = 'Нечетный дом'

 COMMIT

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

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

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

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

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

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

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

Итак, нижняя строка здесь заключается в том, что УРОВЕНЬ ИЗОЛЯЦИИ SET TRANSACTION имеет сродство к процедуре , а не сродство транзакций (как я думал).

Потрясающие!

  • C # Rollback Outer TransactionScope независимо от того, что происходит во вложенных TransactionScopes
  • Поддерживает ли Sql Server 2000 транзакции SSIS?
  • Тест Dtcping проходит, но все же связь с базовым менеджером транзакций не удалась
  • SQL Server - Лучшая альтернатива для улучшения производительности длительной транзакции с множеством вставок?
  • Каковы недостатки реализации транзакций вдали от базы данных?
  • Какой уровень изоляции использует транзакцию autocommit в SQL Server?
  • Как создать эту хранимую процедуру?
  • Запрос COMMIT TRANSACTION не имеет соответствующей BEGIN TRANSACTION
  • TransactionScope и функция Scope - являются ли эти подключения внутри области?
  • SQL Server 2008 Операция завершилась триггером. Партия была прервана
  • Блокирует ли транзакционный блок производительность в SQL Server?
  • Interesting Posts

    Как передать значение имени столбца в качестве аргумента SQL с использованием заполнителей

    Rails 3 – легко работать с именами столбцов Pascal Case

    Операция изоляции моментальных снимков отменена из-за конфликта обновлений

    Поиск, если существует строковое слово между двумя разными таблицами в поле с разделителями-запятыми

    SQL Server находит последнюю неделю за последние 2 месяца

    Создание временной шкалы с несколькими таблицами в SQL Server

    Как получить данные за каждый месяц с текущей даты SQL-запрос

    Вычислить значения SQL в новую вставку

    Импорт существующих хранимых процедур в SQL Server

    Должен объявлять скалярную переменную

    Использование параметров в функции DATEADD запроса

    Как разделить только одно значение строки и вставить в несколько столбцов с помощью хранимой процедуры, значение параметра – из C #

    Как передать список параметров хранимой процедуре и выполнить пакетную вставку в SQL Server

    Как установить переменную SQL с EXEC или sp_executesql

    Хранимая процедура MySQL с IF / THEN / ELSE

    Давайте будем гением компьютера.