Eerste en laatste triggers opgeven
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
U kunt aangeven dat een van de NA-triggers die aan een tabel zijn gekoppeld, als eerste of als laatste NA-trigger kan worden geactiveerd voor elke INVOEG-, VERWIJDER- en BIJWERK-handeling. De AFTER-triggers die worden geactiveerd tussen de eerste en laatste triggers, worden uitgevoerd in niet-gedefinieerde volgorde.
Als u de volgorde voor een AFTER-trigger wilt opgeven, gebruikt u de sp_settriggerorder opgeslagen procedure. sp_settriggerorder heeft de volgende opties.
Optie | Beschrijving |
---|---|
Eerste | Hiermee specificeert u dat de DML-trigger de eerste AFTER-trigger is die is geactiveerd voor een triggeractie. |
laatste | Hiermee specificeert u dat de DML-trigger de laatste AFTER-trigger is die wordt geactiveerd bij een triggeractie. |
Geen | Hiermee geeft u op dat er geen specifieke volgorde is waarin de DML-trigger moet worden geactiveerd. Wordt voornamelijk gebruikt om een trigger opnieuw in te stellen van eerste of laatste. |
In het volgende voorbeeld ziet u het gebruik van sp_settriggerorder:
sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
Belangrijk
De eerste en laatste triggers moeten twee verschillende DML-triggers zijn.
In een tabel kunnen tegelijkertijd INSERT-, UPDATE- en DELETE-triggers zijn gedefinieerd. Elk instructietype kan een eigen eerste en laatste trigger hebben, maar ze kunnen niet dezelfde triggers zijn.
Als de eerste of laatste trigger die voor een tabel is gedefinieerd, geen triggeractie omvat, zoals voor UPDATE, FOR DELETE of VOOR INSERT, is er geen eerste of laatste trigger voor de ontbrekende acties.
INSTEAD OF triggers kunnen niet worden opgegeven als eerste of laatste triggers. INSTEAD OF triggers worden uitgevoerd voordat updates worden doorgevoerd in de onderliggende tabellen. Als er updates worden uitgevoerd door een INSTEAD OF-trigger op onderliggende tabellen, worden de updates uitgevoerd voordat enige AFTER-triggers die op de tabel zijn gedefinieerd, worden geactiveerd. Als een IN PLAATS VAN INSERT-trigger in een weergave bijvoorbeeld gegevens in een basistabel invoegt en de basistabel zelf een IN PLAATS VAN INSERT-trigger en drie NA INSERT-triggers bevat, wordt de IN PLAATS VAN INSERT-trigger op de basistabel geactiveerd in plaats van de invoegactie, en worden de NA INSERT-triggers op de basistabel geactiveerd na elke invoegactie op de basistabel. Zie DML-triggersvoor meer informatie.
Als een ALTER TRIGGER-instructie een eerste of laatste trigger wijzigt, wordt het kenmerk Eerste of Laatste verwijderd en wordt de orderwaarde ingesteld op Geen. De volgorde moet opnieuw worden ingesteld met behulp van sp_settriggerorder.
De functie OBJECTPROPERTY rapporteert of een trigger een eerste of laatste trigger is met behulp van de volgende eigenschappen: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTriggeren ExecIsLastDeleteTrigger.
Replicatie genereert automatisch een eerste trigger voor elke tabel die is opgenomen in een onmiddellijk bijwerken- of wachtrij-abonnement. Voor replicatie is het vereist dat de trigger de eerste is. Replicatie veroorzaakt een fout wanneer u een tabel met een eerste trigger probeert op te nemen in een direct bijwerken of in de wachtrij geplaatst abonnement. Als u een trigger als eerste probeert in te stellen nadat een tabel is opgenomen in een abonnement, retourneert sp_settriggerorder een fout. Als u ALTER op de replicatietrigger gebruikt of sp_settriggerorder gebruikt om de replicatietrigger te wijzigen naar een laatste of zonder trigger, zal het abonnement niet correct functioneren.
Zie ook
OBJECTPROPERTY (Transact-SQL)
sp_settriggerorder (Transact-SQL)