Какова область изоляции вложенных транзакций в 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
. Это верно?
- Выйти и отменить все в скрипте по ошибке
- MSSQL: что происходит при возникновении ошибки во время запуска триггера?
- Эквивалент T-SQL для .NET TransactionScopeOption.Suppress
- SQL Server 2012 - Как работает уровень изоляции «Повторяемый Чтение»?
- Можем ли мы откатить исходное состояние после того, как мы использовали DBCC CHECKIDENT для перезапуска столбца идентификатора?
- Откат внутренней транзакции вложенных транзакций
- Эффективное использование транзакций SQL
- node.js: создание транзакции, которая охватывает вызовы в несколько хранилищ
- Как получить взаимное исключение для отдельных запросов в SQL Server
- Откат транзакции Entity Framework 6
- Процедура вызова на связанном сервере без распределенной транзакции
- Вызовите несколько хранимых процедур SQL Server в транзакции
- Чтение уровня изолированной изоляции на SQL-сервере для одного оператора
Я не думаю, что это правильно.
См. Замечания здесь: Установить транзакцию
Только один из параметров уровня изоляции может быть установлен за раз, и он остается установленным для этого соединения, пока он не будет явно изменен.
Вы [Боб Пробст] верны. Интересно, что в соответствии с документацией, которую вы указали:
Если вы выдаете SET TRANSACTION ISOLATION LEVEL в хранимой процедуре или триггере, когда объект возвращает управление, уровень изоляции сбрасывается до уровня, действующего при вызове объекта. Например, если вы установите REPEATABLE READ в пакетном режиме, а затем пакет вызывается хранимой процедурой, которая устанавливает уровень изоляции SERIALIZABLE, параметр уровня изоляции возвращается в REPEATABLE READ, когда хранимая процедура возвращает управление пакету.
Итак, нижняя строка здесь заключается в том, что УРОВЕНЬ ИЗОЛЯЦИИ SET TRANSACTION имеет сродство к процедуре , а не сродство транзакций (как я думал).
Потрясающие!