Является ли триггер входит в состав транзакции в SQL Server - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть три таблицы в SQL Server:

  1. Сотрудник
  2. EmployeeDetails
  3. EmployeeHistory

Я записал триггер в таблицу Employee, чтобы, если запись была вставлена ​​в Employee, она также вставляла строку в EmployeeHistory; который работает нормально.

Теперь я создал хранимую процедуру с транзакцией и вставкой записей в Employee, затем EmployeeDetails. После вставки записи в Employee и, если возникнет какая-либо проблема и откат транзакции, будет ли удалена строка, вставленная в EmployeeHistory, или нет?

1 Ответ

0 голосов
/ 17 ноября 2018

По умолчанию опция XACT_ABORT равна ON в триггере. Здесь можно увидеть .Если для этой функции установлено значение ON, любая возникающая ошибка прерывает / прерывает пакет, поэтому вся транзакция будет откатываться.

В документации Microsoft говорится :

Когда SET XACT_ABORT включен, если инструкция Transact-SQL вызывает ошибку во время выполнения, вся транзакция завершается и откатывается.

Когда SET XACT_ABORT выключен, в некоторых случаях только Transact-Оператор SQL, вызвавший ошибку, откатывается, и транзакция продолжает обрабатываться.В зависимости от серьезности ошибки можно выполнить откат всей транзакции, даже если для SET XACT_ABORT установлено значение OFF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...