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

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


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

Но у меня появился вопрос - зачем в принципе нужна такая вложенность, где это может быть использовано?
Единственное, что идёт на ум - для отката при возникновении исключения (при XACT_ABORT = ON).
  • Вопрос задан
  • 3215 просмотров
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
Собственно простой вариант: sp с транзакцией вызывает другую sp с транзакцией, которая может быть вызвана и сама - вот и "матрешка", если не озаботится например проверкой trancount.
Ну и архитектурно - за пределами вложенной транзакции изменения еще недоступны - иногда именно это и требуется.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Пример:
Есть готовые куски кода с транзакциями:
Транзакция 1: Пополнить счёт пользователя
Транзакция 2: Дать скидку пользователю

И есть транзакция, которая отвечает за регистрацию:
Транзакция 3: Регистрация (создать пользователя)

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы