Откат предыдущих триггеров при возникновении ошибки в более позднем триггере

#sql-server #tsql #triggers #dml

Вопрос:

Я пытаюсь понять триггеры SQL Server. В качестве примера у нас есть сценарий с таблицей, для которой есть несколько триггеров insert .

Если у нас возникнет проблема в последнем триггере, выдаст ошибку и вызовет откат транзакции, будут ли откатываться и предыдущие триггеры?

В этом сценарии мы говорим о триггерах DML, и они являются последовательными, а не вложенными. Мы также имеем в виду два или три триггера вставки или обновления. Мы используем порядок триггеров, поэтому мы знаем, какой триггер в серии является «последним» триггером для выполнения.

Комментарии:

1. Ну, все триггеры выполняются в контексте транзакции, которая вызвала их срабатывание, — того INSERT оператора, который вызвал их срабатывание. Таким образом, любой откат триггера приведет к откату всей транзакции INSERT инструкции и любых предыдущих операций триггера

2. Я предлагаю вам обратить внимание на проблему обслуживания, которую вызывают триггеры, и рассмотреть решение, которое, по возможности, не использует никаких триггеров

3. Спасибо, Марк, вы говорите, что да, вся вставка (например) будет откатана, поэтому триггеры и фактическая вставка завершатся неудачей, потому что полная серия триггеров не будет зафиксирована. Это правильно?

4. @Ник. Макдермейд, это не вариант. Поставщик добавил 1 или 2 триггера, и если мы добавим свои собственные, мне нужно понять, что произойдет, если один из них ошибется и вызовет откат. В ходе нашего тестирования мы увидели, на что указал marc_s, но я хочу быть уверенным в процессе транзакции.

5. Я говорю: исходная операция (ваша INSERT ) и любой триггер(ы) будут выполняться в рамках одной транзакции , и если вы откатите транзакцию, все внесенные в нее изменения будут возвращены обратно