Різниця між тригерами ЗА і ПІСЛЯ?


Відповіді:


153

Різниці немає, вони роблять те саме.

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

Це те саме, що

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

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


14
Мені сподобався коментар щодо вставок у представлення за допомогою тригерів. Дуже корисна інформація. Ура.
Маріуш

Вибачте, містер @Ben, який би сценарій було вставити у вигляд? Спасибі ^ - ^
Жанкарло Фонталво

@JeancarloFontalvo, 1) сумісність. Таблиці, що лежать в основі, можуть змінюватися, якщо вигляд залишається колишнім. 2) контроль доступу, певні користувачі можуть мати дозвіл писати лише до певних стовпців.
Бен

17

@Ben абсолютно прав.

Ось стаття MSDN Дослідження тригерів SQL Server

Абзац із статті:

Цей синтаксис також прийнятний у старих версіях SQL Server. Однак тепер, коли у SQL Server 2000 є два типи тригерів, я вважаю за краще тригери FOR як ПІСЛЯ тригерів. Таким чином, для решти цієї статті я посилаюсь або ПІСЛЯ, або ВСТАНОВИТИ тригери.

Як і ПІСЛЯ тригера, який ви бачили раніше, цей тригер запобігає внесенню змін у поле прізвища. Однак він застосовує це правило бізнесу інакше, ніж попередній приклад. Оскільки тригер INSTEAD OF спрацьовує замість оператора UPDATE, тригер INSTEAD OF оцінює, проходить тест бізнес-правил чи ні. Якщо тест бізнес-правил проходить, для того, щоб відбулося оновлення, тригер INSTEAD OF повинен явно викликати оператор UPDATE знову.


4

ПІСЛЯ вказує, що тригер DML запускається лише тоді, коли всі операції, зазначені в запускаючому операторі SQL, успішно виконані. Всі активні дії каскаду та перевірки обмежень також повинні бути успішними до запуску цього тригера. ПІСЛЯ - це за замовчуванням, коли FOR - єдине вказане ключове слово.

ПІСЛЯ тригерів не можна визначити у видах.

INSTEAD OF Вказує, що тригер DML виконується замість запуску оператора SQL, отже, перекриваючи дії операторів запуску. INSTEAD OF не можна вказати для тригерів DDL або входу.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql


1
Це словосполучення "ПІСЛЯ є за замовчуванням, коли FOR є єдиним ключовим словом." дуже заплутано. Вони могли це краще сформулювати.
FMFF
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.