Для чего нужны вложенные транзакции?



@egecorp

В последнее время на собеседованиях встречаю вопросы, связанные со вложенными транзакциями в MS SQL.

BEGIN TRANSACTION
   BEGIN TRANSACTION
      -- Что-то делаем
   COMMIT
ROLLBACK

Вопрос задают один и тот же, будет ли сохранено то, что во внутренней транзакции было подтверждено при коммите. Понятно логически, что не будет.

Но у меня появился вопрос — зачем в принципе нужна такая вложенность, где это может быть использовано?
Единственное, что идёт на ум — для отката при возникновении исключения (при XACT_ABORT = ON).


Решения вопроса 1



@d-stream

Собственно простой вариант: sp с транзакцией вызывает другую sp с транзакцией, которая может быть вызвана и сама — вот и «матрешка», если не озаботится например проверкой trancount.
Ну и архитектурно — за пределами вложенной транзакции изменения еще недоступны — иногда именно это и требуется.



1

комментарий


Ответы на вопрос 0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *