Was ist der Unterschied zwischen FOR
und AFTER
Auslöser?
Was ist der Unterschied zwischen FOR
und AFTER
Auslöser?
Antworten:
Es gibt keinen Unterschied, sie machen das Gleiche.
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
Ist das gleiche wie
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
Ein INSTEAD OF
Trigger ist anders und wird vor und anstelle der Einfügung ausgelöst und kann für Ansichten verwendet werden, um die entsprechenden Werte in die zugrunde liegenden Tabellen einzufügen.
@ Ben ist absolut richtig.
Hier ist der MSDN-Artikel Erkunden von SQL Server-Triggern
Ein Absatz aus dem Artikel:
Diese Syntax ist auch in älteren Versionen von SQL Server akzeptabel. Da es in SQL Server 2000 nun zwei Arten von Triggern gibt, bezeichne ich FOR-Trigger lieber als AFTER-Trigger. Daher werde ich im weiteren Verlauf dieses Artikels entweder auf NACH oder STATT Trigger verweisen.
Wie der AFTER-Trigger, den Sie zuvor gesehen haben, verhindert dieser Trigger, dass Änderungen am Feld Nachname vorgenommen werden. Diese Geschäftsregel wird jedoch anders als im vorherigen Beispiel implementiert. Da der INSTEAD OF-Trigger anstelle der UPDATE-Anweisung ausgelöst wird, wertet der INSTEAD OF-Trigger aus, ob der Geschäftsregel-Test bestanden wurde oder nicht. Wenn der Geschäftsregel-Test erfolgreich ist, muss der INSTEAD OF-Trigger die UPDATE-Anweisung erneut explizit aufrufen, damit die Aktualisierung erfolgt.
AFTER gibt an, dass der DML-Trigger nur ausgelöst wird, wenn alle in der auslösenden SQL-Anweisung angegebenen Vorgänge erfolgreich ausgeführt wurden. Alle referenziellen Kaskadenaktionen und Einschränkungsprüfungen müssen ebenfalls erfolgreich sein, bevor dieser Trigger ausgelöst wird. AFTER ist die Standardeinstellung, wenn FOR das einzige angegebene Schlüsselwort ist.
AFTER-Trigger können in Ansichten nicht definiert werden.
STATT AN Gibt an, dass der DML-Trigger anstelle der auslösenden SQL-Anweisung ausgeführt wird, wodurch die Aktionen der auslösenden Anweisungen überschrieben werden. STATT OF kann nicht für DDL- oder Anmeldetrigger angegeben werden.
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql