Ange första och sista utlösare

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Du kan ange att en av de AFTER-utlösare som är associerade med en tabell antingen är den första AFTER-utlösaren eller den sista AFTER-utlösaren som utlöses för varje INSERT-, DELETE- och UPDATE-utlösande åtgärder. AFTER-utlösarna som körs mellan den första och den sista utlösaren exekveras i en odefinierad ordning.

Om du vill ange ordningen för en AFTER-utlösare använder du lagrade proceduren sp_settriggerorder. sp_settriggerorder har följande alternativ.

Option Description
första Anger att DML-utlösaren är den första AFTER-utlösaren som utlöstes för en utlösande åtgärd.
senaste Anger att DML-triggern är den sista AFTER-triggern som aktiveras för en utlösande åtgärd.
Ingen Anger att det inte finns någon specifik ordning i vilken DML-utlösaren ska utlösas. Används främst för att återställa en utlösare från att vara antingen första eller sista.

I följande exempel visas hur du använder sp_settriggerorder:

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

Viktigt!

De första och sista utlösarna måste vara två olika DML-utlösare.

En tabell kan ha INSERT-, UPDATE- och DELETE-utlösare definierade på samma gång. Varje instruktionstyp kan ha sina egna första och sista utlösare, men de kan inte vara samma utlösare.

Om den första eller sista utlösaren som definierats för en tabell inte täcker en utlösande åtgärd, till exempel att inte täcka FÖR UPPDATERING, FÖR BORTTAGNING eller FÖR INSERT, finns det ingen första eller sista utlösare för de åtgärder som saknas.

INSTEAD OF-triggers kan inte anges som den första eller sista triggern. INSTEAD OF-triggers aktiveras innan uppdateringar görs i de underliggande tabellerna. Om uppdateringar görs av en I STÄLLET FÖR-utlösare på underliggande tabeller, sker uppdateringarna innan några AFTER-utlösare som definierats på tabellen utlöses. Om till exempel en I STÄLLET FÖR INSERT-utlösare på en vy lägger till data i en bastabell och själva bastabellen innehåller en I STÄLLET FÖR INSERT-utlösare och tre AFTER INSERT-utlösare, så utlöses I STÄLLET FÖR INSERT-utlösaren på bastabellen i stället för den vanliga infogningsåtgärden, och AFTER-utlösarna i bastabellen utlöses efter någon infogning i bastabellen. Mer information finns i DML-utlösare.

Om en ALTER TRIGGER-instruktion ändrar en första eller sista utlösare tas attributet Första eller Sista bort och ordervärdet anges till Ingen. Ordern måste återställas med hjälp av sp_settriggerorder.

Funktionen OBJECTPROPERTY rapporterar om en utlösare är en första eller sista utlösare med hjälp av följande egenskaper: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTrigger och ExecIsLastDeleteTrigger.

Replikering genererar automatiskt en första trigger för varje tabell som ingår i en prenumeration på omedelbar uppdatering eller köad uppdatering. Replikering kräver att dess utlösare är den första utlösaren. Replikering genererar ett fel när du försöker inkludera en tabell med en för första gången använd trigger i en prenumeration på omedelbar uppdatering eller köad uppdatering. Om du försöker ställa in en utlösare som primär utlösare efter att en tabell har inkluderats i en prenumeration returnerar sp_settriggerorder ett fel. Om du använder ALTER på replikeringsutlösaren eller använder sp_settriggerorder för att ändra replikeringsutlösaren till en sista eller ingen utlösare fungerar inte prenumerationen korrekt.

Se även

OBJEKTEGENSKAP (Transact-SQL)
sp_settriggerorder (Transact-SQL)