FOR / AFTER в триггерах SQL - PullRequest
       1

FOR / AFTER в триггерах SQL

4 голосов
/ 17 ноября 2010

Я новичок в SQL. Я читаю о триггерах в SQL. Я получил почти о триггерах. Но в триггерах DML мы используем ключевое слово FOR / AFTER. Я не понял разницы между FOR / AFTER и почему мы используем ключевое слово FOR / AFTER. Я уже читал на MSDN, но не получил простой ответ. Может кто-нибудь объяснить мне, что это?

Заранее спасибо.

Ответы [ 5 ]

7 голосов
/ 17 ноября 2010

Нет разницы между использованием FOR и AFTER.

Я полагаю, что оригинальный (до 2000) синтаксис использовал только ключевое слово FOR. Однако когда были введены триггеры INSTEAD OF , ключевое слово FOR могло показаться довольно запутанным. «AFTER» более точно передает тип триггера и его легче отличить от «INSTEAD OF».


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

Триггер AFTER обычно используется, если мы хотим выполнить дополнительные задачи, основываясь на том, что только что произошло. Например, у вас может быть триггер «AFTER DELETE», который копирует удаленные строки в некую архивную таблицу. По сути, в триггере AFTER вы, как правило, все еще хотите, чтобы действие происходило.

2 голосов
/ 17 ноября 2010

Если я правильно интерпретирую ваши комментарии к другим ответам, вы захотите узнать, почему или когда используются ключевые слова «ЗА | ПОСЛЕ».

Все просто: есть два вида триггеров: триггер AFTER и триггер INSTEAD-OF.
INSTEAD-OF-триггер, например, для действие вставки может быть записано как

create trigger myTrigger on myTable
INSTEAD OF insert
begin
    (... code goes here ...)
end

и триггер AFTER может быть записан как

create trigger myTrigger on myTable
AFTER insert
begin
    (... code goes here ...)
end

или

create trigger myTrigger on myTable
FOR insert
begin
    (... code goes here ...)
end

Как упоминает Damien_The_Unbeliever, ключевое слово AFTER более читабельно, чем версия FOR, то есть все.

2 голосов
/ 17 ноября 2010

С MSDN :

ПОСЛЕ триггеров никогда не выполняются, если происходит нарушение ограничения; поэтому эти триггеры нельзя использовать для какой-либо обработки, которая может предотвратить нарушения ограничений.

И , затем :

Вы можете запросить триггеры AFTER, указав ключевые слова AFTER или FOR. Поскольку ключевое слово FOR имеет тот же эффект, что и AFTER, триггеры DML с ключевым словом FOR также классифицируются как триггеры AFTER

Казалось бы, нет никакой разницы.

1 голос
/ 17 ноября 2010

Они одинаковы.См. Этот отрывок из BOL: «FOR | AFTER AFTER указывает, что триггер DML сработает только тогда, когда все операции, указанные в инициирующем операторе SQL, выполнены успешно. Все ссылочные каскадные действия и проверки ограничений также должны быть успешными, прежде чем этот триггер сработает.

AFTER - это значение по умолчанию, когда FOR является единственным указанным ключевым словом.

Триггеры AFTER не могут быть определены в представлениях. "

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

Согласно тому, что я наблюдаю, FOR используется в триггере DDL, а AFTER используется в триггерах DML. У них одинаковый способ работы.

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