Яка різниця між FOR
та AFTER
тригерами?
Яка різниця між FOR
та AFTER
тригерами?
Відповіді:
Різниці немає, вони роблять те саме.
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
Це те саме, що
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
INSTEAD OF
Тригер відрізняється, і спрацьовує перед і замість вставки і може бути використаний на уявленнях, для того , щоб вставити відповідні значення в базових таблиці.
@Ben абсолютно прав.
Ось стаття MSDN Дослідження тригерів SQL Server
Абзац із статті:
Цей синтаксис також прийнятний у старих версіях SQL Server. Однак тепер, коли у SQL Server 2000 є два типи тригерів, я вважаю за краще тригери FOR як ПІСЛЯ тригерів. Таким чином, для решти цієї статті я посилаюсь або ПІСЛЯ, або ВСТАНОВИТИ тригери.
Як і ПІСЛЯ тригера, який ви бачили раніше, цей тригер запобігає внесенню змін у поле прізвища. Однак він застосовує це правило бізнесу інакше, ніж попередній приклад. Оскільки тригер INSTEAD OF спрацьовує замість оператора UPDATE, тригер INSTEAD OF оцінює, проходить тест бізнес-правил чи ні. Якщо тест бізнес-правил проходить, для того, щоб відбулося оновлення, тригер INSTEAD OF повинен явно викликати оператор UPDATE знову.
ПІСЛЯ вказує, що тригер DML запускається лише тоді, коли всі операції, зазначені в запускаючому операторі SQL, успішно виконані. Всі активні дії каскаду та перевірки обмежень також повинні бути успішними до запуску цього тригера. ПІСЛЯ - це за замовчуванням, коли FOR - єдине вказане ключове слово.
ПІСЛЯ тригерів не можна визначити у видах.
INSTEAD OF Вказує, що тригер DML виконується замість запуску оператора SQL, отже, перекриваючи дії операторів запуску. INSTEAD OF не можна вказати для тригерів DDL або входу.
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql