Тригер в поєднанні з транзакцією


25

Припустимо, у нас така ситуація:

У нас є таблиця (скажімо Table_A), яка має тригер INSERT. Завдання тригера - оновлення деяких рядків на table_Bоснові вставлених значень у table_A.

Тепер усе нормально, коли ми просто вставляємо рядок у таблицю, а як бути з ситуаціями, коли ми вставляємо дані через транзакцію ?. Чи буде тригер чекати, поки всі виписки про транзакції будуть запускатися успішно, або він буде знятий, коли він розпізнає вставку ?. Якщо тригер спрацьовує негайно, коли він розпізнає першу вставку, що буде, якщо транзакція вийде з ладу в останньому рядку ?. Чи існує якийсь механізм такої ситуації ?.

Відповіді:


37

Вставка завжди знаходиться в межах транзакції.

Якщо у вас немає явного BEGIN TRAN ... COMMITабо SET IMPLICIT_TRANSACTIONS ONтоді оператор працює як автономна транзакція автоматичного здійснення .

Тригер завжди є частиною транзакції за дію, яка спрацьовує тригер. Якщо в тригері сталася помилка, яка спричиняє відкат транзакцій, дія стрільби також буде відмінена.

Тригери неявно XACT_ABORTувімкнено. Помилка, якщо цей параметр увімкнено, автоматично призведе до відкату транзакцій (за винятком помилок, що виникають у коді із RAISERRORзаявою).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.