Angeben des ersten und des letzten TriggersSpecify First and Last Triggers

Sie können angeben, dass einer der AFTER-Trigger, der einer Tabelle zugeordnet ist, der erste oder der letzte AFTER-Trigger ist, der für jede der auslösenden INSERT-, DELETE- und UPDATE-Aktionen ausgelöst wird.You can specify that one of the AFTER triggers associated with a table be either the first AFTER trigger or the last AFTER trigger that is fired for each INSERT, DELETE, and UPDATE triggering actions. Die AFTER-Trigger, die zwischen dem ersten und letzten Trigger ausgelöst werden, werden in einer nicht definierten Reihenfolge ausgeführt.The AFTER triggers that are fired between the first and last triggers are executed in undefined order.

Um die Ausführungsreihenfolge für einen AFTER-Trigger anzugeben, verwenden Sie die gespeicherte Prozedur sp_settriggerorder .To specify the order for an AFTER trigger, use the sp_settriggerorder stored procedure. sp_settriggerorder besitzt die folgenden Optionen.sp_settriggerorder has the following options.

OptionOption BeschreibungDescription
ErsterFirst Gibt an, dass der DML-Trigger der erste AFTER-Trigger ist, der für eine Triggeraktion ausgelöst wird.Specifies that the DML trigger is the first AFTER trigger fired for a triggering action.
LetzterLast Gibt an, dass der DML-Trigger der letzte AFTER-Trigger ist, der für eine Triggeraktion ausgelöst wird.Specifies that the DML trigger is the last AFTER trigger fired for a triggering action.
KeineNone Gibt an, dass keine besondere Reihenfolge vorhanden ist, in der der DML-Trigger ausgelöst werden soll.Specifies that there is no specific order in which the DML trigger should be fired. Diese Option wird hauptsächlich verwendet, um einen ersten oder letzten Trigger zurückzusetzen.Used mainly to reset a trigger from being either first or last.

Das folgende Beispiel zeigt die Verwendung von sp_settriggerorder:The following example shows using sp_settriggerorder:

sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'  
Wichtig

Der erste und der letzte Trigger müssen zwei unterschiedliche Trigger sein.The first and last triggers must be two different DML triggers.

Für eine Tabelle können gleichzeitig INSERT-, UPDATE- und DELETE-Trigger definiert sein.A table can have INSERT, UPDATE, and DELETE triggers defined on it at the same time. Jeder Anweisungstyp kann über eigene erste und letzte Trigger verfügen; es darf sich dabei jedoch nicht um dieselben Trigger handeln.Each statement type can have its own first and last triggers, but they cannot be the same triggers.

Wenn der für eine Tabelle definierte erste oder letzte Trigger keine Triggeraktion abdeckt, wie beispielsweise FOR UPDATE, FOR DELETE oder FOR INSERT, gibt es keinen ersten oder letzten Trigger für die fehlenden Aktionen.If the first or last trigger defined for a table does not cover a triggering action, such as not covering FOR UPDATE, FOR DELETE, or FOR INSERT, there is no first or last trigger for the missing actions.

INSTEAD OF-Trigger können nicht als erste oder letzte Trigger angegeben werden.INSTEAD OF triggers cannot be specified as first or last triggers. INSTEAD OF-Trigger werden ausgelöst, bevor Updates an den zugrunde liegenden Tabellen vorgenommen werden.INSTEAD OF triggers are fired before updates are made to the underlying tables. Wenn die Updates an zugrunde liegenden Tabellen durch einen INSTEAD OF-Trigger vorgenommen werden, erfolgen die Updates, bevor einer der für die Tabelle definierten AFTER-Trigger ausgelöst wird.If updates are made by an INSTEAD OF trigger to underlying tables, the updates occur before any AFTER triggers defined on the table are fired. Wenn z. B. ein INSTEAD OF INSERT-Trigger für eine Sicht Daten in eine Basistabelle einfügt und die Basistabelle selbst einen INSTEAD OF INSERT-Trigger und drei AFTER INSERT-Trigger enthält, wird der INSTEAD OF INSERT-Trigger für die Basistabelle statt der Einfügeaktion ausgelöst, und die AFTER-Trigger für die Basistabelle werden nach einer Einfügeaktion für die Basistabelle ausgelöst.For example, if an INSTEAD OF INSERT trigger on a view inserts data into a base table and the base table itself contains an INSTEAD OF INSERT trigger and three AFTER INSERT triggers, the INSTEAD OF INSERT trigger on the base table is fired instead of the inserting action, and the AFTER triggers on the base table are fired after any inserting action on the base table. Weitere Informationen finden Sie unter DML Triggers.For more information, see DML Triggers.

Wenn eine ALTER TRIGGER-Anweisung den ersten oder letzten Trigger ändert, wird das First - oder Last -Attribut gelöscht, und der Reihenfolgewert wird auf Nonefestgelegt.If an ALTER TRIGGER statement changes a first or last trigger, the First or Last attribute is dropped and the order value is set to None. Die Reihenfolge muss mit sp_settriggerorderzurückgesetzt werden.The order must be reset by using sp_settriggerorder.

Die OBJECTPROPERTY-Funktion gibt mithilfe der ExecIsFirstTrigger - und ExecIsLastTrigger-Eigenschaften an, ob es sich um einen ersten oder letzten Trigger handelt.The OBJECTPROPERTY function reports whether a trigger is a first or last trigger by using the properties ExecIsFirstTrigger and ExecIsLastTrigger.

Die Replikation generiert automatisch einen ersten Trigger für alle Tabellen, die in einem Abonnement mit sofortigem Update oder verzögertem Update über eine Warteschlange enthalten sind.Replication automatically generates a first trigger for any table that is included in an immediate updating or queued updating subscription. Für die Replikation gilt, dass ihr Trigger der erste Trigger sein muss.Replication requires that its trigger be the first trigger. Die Replikation meldet einen Fehler, wenn Sie versuchen, eine Tabelle, die einen ersten Trigger aufweist, in ein Abonnement mit sofortigem Update bzw. verzögertem Update über eine Warteschlange einzufügen.Replication raises an error when you try to include a table with a first trigger in an immediate updating or queued updating subscription. Wenn Sie versuchen, einen Trigger zum ersten Trigger zu erklären, nachdem eine Tabelle in ein Abonnement aufgenommen wurde, gibt sp_settriggerorder einen Fehler zurück.If you try to make a trigger a first trigger after a table has been included in a subscription, sp_settriggerorder returns an error. Wenn Sie ALTER für den Replikationstrigger verwenden oder sp_settriggerorder verwenden, um den Replikationstrigger auf einen Trigger vom Typ LAST oder NONE festzulegen, funktioniert das Abonnement nicht ordnungsgemäß.If you use ALTER on the replication trigger or use sp_settriggerorder to change the replication trigger to a last or none trigger, the subscription will not function correctly.

Siehe auchSee Also

OBJECTPROPERTY (Transact-SQL) OBJECTPROPERTY (Transact-SQL)
sp_settriggerorder (Transact-SQL) sp_settriggerorder (Transact-SQL)