Specifica dei primi e degli ultimi triggerSpecify First and Last Triggers

È possibile specificare che uno dei trigger AFTER associati a una tabella sia il primo oppure l'ultimo trigger AFTER che viene attivato per ogni azione di trigger INSERT, DELETE e UPDATE.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. I trigger AFTER compresi fra il primo e l'ultimo vengono eseguiti in base a un ordine non definito.The AFTER triggers that are fired between the first and last triggers are executed in undefined order.

Per specificare l'ordine per un trigger AFTER, usare la stored procedure sp_settriggerorder .To specify the order for an AFTER trigger, use the sp_settriggerorder stored procedure. sp_settriggerorder ha le opzioni seguenti.sp_settriggerorder has the following options.

OpzioneOption DescrizioneDescription
PrimoFirst Specifica che il trigger DML è il primo trigger AFTER attivato per un'azione di trigger.Specifies that the DML trigger is the first AFTER trigger fired for a triggering action.
UltimoLast Specifica che il trigger DML è l'ultimo trigger AFTER attivato per un'azione di trigger.Specifies that the DML trigger is the last AFTER trigger fired for a triggering action.
NessunoNone Specifica che non esiste un ordine specifico per l'attivazione del trigger DML.Specifies that there is no specific order in which the DML trigger should be fired. Viene utilizzata principalmente per reimpostare un trigger precedentemente designato come primo o ultimo.Used mainly to reset a trigger from being either first or last.

L'esempio seguente mostra l'utilizzo di sp_settriggerorder:The following example shows using sp_settriggerorder:

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

Importante

Il primo trigger e l'ultimo devono essere due trigger DML distinti.The first and last triggers must be two different DML triggers.

Una tabella può includere contemporaneamente trigger INSERT, UPDATE e DELETE.A table can have INSERT, UPDATE, and DELETE triggers defined on it at the same time. È possibile impostare primo e ultimo trigger per ogni tipo di istruzione, ma non può trattarsi degli stessi trigger.Each statement type can have its own first and last triggers, but they cannot be the same triggers.

Se il primo o l'ultimo trigger definito per una tabella non copre un'azione di trigger, ad esempio non copre FOR UPDATE, FOR DELETE o FOR INSERT, per le azioni mancanti non esiste un primo o un ultimo trigger.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.

Non è possibile specificare i trigger INSTEAD OF come primi o ultimi trigger.INSTEAD OF triggers cannot be specified as first or last triggers. I trigger INSTEAD OF vengono attivati prima dell'esecuzione degli aggiornamenti sulle tabelle sottostanti.INSTEAD OF triggers are fired before updates are made to the underlying tables. Se un trigger INSTEAD OF esegue aggiornamenti sulle tabelle sottostanti, tali aggiornamenti vengono eseguiti prima dell'attivazione di qualsiasi trigger AFTER incluso nella tabella.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. Ad esempio, se un trigger INSTEAD OF INSERT su una vista inserisce dati in una tabella di base e tale tabella contiene un trigger INSTEAD OF INSERT e tre trigger AFTER INSERT, invece dell'azione di inserimento viene attivato il trigger INSTEAD OF INSERT della tabella di base e i trigger AFTER della tabella di base vengono attivati dopo l'esecuzione di qualsiasi azione di inserimento sulla tabella stessa.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. Per altre informazioni, vedere DML Triggers.For more information, see DML Triggers.

Se il primo o l'ultimo trigger viene modificato da un'istruzione ALTER TRIGGER, l'attributo First o Last viene rimosso e il valore relativo all'ordine viene impostato su None.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. È necessario reimpostare l'ordine usando sp_settriggerorder.The order must be reset by using sp_settriggerorder.

La funzione OBJECTPROPERTY usa le proprietà ExecIsFirstTrigger e ExecIsLastTriggerper segnalare se un trigger è primo o ultimo.The OBJECTPROPERTY function reports whether a trigger is a first or last trigger by using the properties ExecIsFirstTrigger and ExecIsLastTrigger.

La replica genera automaticamente un primo trigger per ogni tabella inclusa in una sottoscrizione ad aggiornamento in coda o ad aggiornamento immediato.Replication automatically generates a first trigger for any table that is included in an immediate updating or queued updating subscription. La replica richiede che il proprio trigger sia il primo trigger.Replication requires that its trigger be the first trigger. La replica genera un errore se si cerca di includere una tabella con un primo trigger in una sottoscrizione ad aggiornamento immediato o ad aggiornamento in coda.Replication raises an error when you try to include a table with a first trigger in an immediate updating or queued updating subscription. Se si prova a impostare un trigger come primo dopo l'inclusione di una tabella in una sottoscrizione, sp_settriggerorder restituisce un errore.If you try to make a trigger a first trigger after a table has been included in a subscription, sp_settriggerorder returns an error. Se si usa ALTER sul trigger di replica oppure sp_settriggerorder per modificare il trigger di replica come ultimo trigger o come trigger senza un ordine di esecuzione specifico, la sottoscrizione non funzionerà in modo corretto.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.

Vedere ancheSee Also

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