Specificare i primi e gli ultimi trigger

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di Azure SQLDatabase SQL in Microsoft Fabric

È possibile specificare che uno dei trigger AFTER associati a una tabella sia il primo trigger AFTER oppure l'ultimo trigger AFTER eseguito per ognuna delle azioni di attivazione INSERT, DELETE e UPDATE. I trigger AFTER attivati tra il primo e l'ultimo vengono eseguiti in un ordine non definito.

Per specificare l'ordine di esecuzione di un trigger AFTER, utilizzare la stored procedure sp_settriggerorder. sp_settriggerorder ha le opzioni seguenti.

Opzione Descrizione
First Specifica che il trigger DML è il primo trigger AFTER attivato per un'azione che lo attiva.
Ultimo Specifica che il trigger DML è l'ultimo trigger AFTER attivato per un'azione attivante.
Nessuno Specifica che non esiste un ordine specifico per l'attivazione del trigger DML. Viene utilizzata principalmente per reimpostare un trigger precedentemente designato come primo o ultimo.

L'esempio seguente mostra l'utilizzo di sp_settriggerorder:

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

Importante

Il primo trigger e l'ultimo devono essere due trigger DML distinti.

Una tabella può avere definiti allo stesso tempo i trigger INSERT, UPDATE e DELETE. È possibile impostare primo e ultimo trigger per ogni tipo di istruzione, ma non può trattarsi degli stessi trigger.

Se il primo o l'ultimo trigger definito per una tabella non copre un'azione di attivazione, ad esempio non copre FOR UPDATE, FOR DELETEo FOR INSERT, non esiste alcun primo o ultimo trigger per le azioni mancanti.

Non è possibile specificare i trigger INSTEAD OF come primi o ultimi trigger. I trigger INSTEAD OF vengono attivati prima che gli aggiornamenti vengano applicati alle tabelle di base. Se un trigger INSTEAD OF esegue aggiornamenti sulle tabelle sottostanti, tali aggiornamenti vengono eseguiti prima dell'attivazione di qualsiasi trigger AFTER incluso nella tabella. Ad esempio, se un trigger INSTEAD OF INSERT in una vista inserisce i dati in una tabella di base e la tabella di base stessa contiene un trigger INSTEAD OF INSERT e tre trigger AFTER INSERT , il trigger INSTEAD OF INSERT nella tabella di base viene attivato invece dell'azione di inserimento e i trigger AFTER nella tabella di base vengono attivati dopo qualsiasi azione di inserimento nella tabella di base. Per altre informazioni, vedere DML Triggers.

Se un'istruzione ALTER TRIGGER modifica un primo o l'ultimo trigger, l'attributo First o Last viene eliminato e il valore dell'ordine è impostato su Nessuno. È necessario reimpostare l'ordine usando sp_settriggerorder.

La funzione OBJECTPROPERTY indica se un trigger è un primo o ultimo trigger usando le proprietà seguenti: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTriggere ExecIsLastDeleteTrigger.

La replicazione genera automaticamente un trigger iniziale per qualsiasi tabella che è inclusa in una sottoscrizione ad aggiornamento immediato o ad aggiornamento in coda. La replicazione richiede che il relativo trigger sia il primo 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. Se si prova a impostare un trigger come primo dopo l'inclusione di una tabella in una sottoscrizione, sp_settriggerorder restituisce un errore. 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.

Vedi anche

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