Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Specificerar vilka AFTER avtryckare som avfyras först eller sist. De AFTER triggers som avfyras mellan den första och sista triggern utförs i odefinierad ordning.
Transact-SQL syntaxkonventioner
Syntax
sp_settriggerorder
[ @triggername = ] N'triggername'
, [ @order = ] 'order'
, [ @stmttype = ] 'stmttype'
[ , [ @namespace = ] 'DATABASE' | 'SERVER' | NULL ]
[ ; ]
Arguments
[ @triggername = ] N'triggername'
Namnet på triggern och schemat den tillhör, om tillämpligt, vars ordning ska sättas eller ändras.
@triggername är nvarchar(517), utan standard, och har formatet [ trigger_schema ] trigger_name. Om namnet inte motsvarar en trigger eller om namnet motsvarar en INSTEAD OF trigger, returnerar proceduren ett fel. Ett schema kan inte specificeras för DDL- eller inloggningstriggers.
[ @order = ] 'ordning'
Inställningen för den nya ordningen på triggern. @order är varchar(10) och kan vara något av följande värden.
| Värde | Description |
|---|---|
First |
Avtryckaren avfyras först. |
Last |
Avtryckaren avfyras sist. |
None |
Avtryckaren avfyras i obestämd ordning. |
Viktigt!
Och FirstLast utlösarna måste vara två olika utlösare.
[ @stmttype = ] 'stmttype'
Specificerar det Transact-SQL uttalande som utlöser avtryckaren.
@stmttype är varchar(50) och kan vara INSERT, UPDATE, DELETE, , LOGONeller vilken T-SQL-satshändelse som helst som listas i DDL-händelser. Händelsegrupper kan inte specificeras.
En trigger kan betecknas som ELLER-trigger FirstLast för en statementtyp först efter att den triggern definierats som en trigger för den statementtypen. Till exempel kan trigger TR1 anges First för INSERT på tabellen T1 om TR1 definieras som en INSERT trigger. Databasmotorn returnerar ett fel om TR1, som endast definierades som en INSERT trigger, är satt som en First eller Last trigger för en UPDATE sats. Mer information finns i avsnittet Kommentarer.
@namespace = { 'DATABAS' | 'SERVER' | NULL }
När @triggername är en DDL-trigger specificerar @namespace om @triggername skapades med databasomfång eller serveromfång. Om @triggername är en inloggningsutlösare SERVER måste den specificeras. För mer information om DDL-triggerscope, se DDL Triggers. Om det inte specificeras, eller om NULL det är specificerat, är @triggername en DML-trigger.
Returnera kodvärden
0 (framgång) och 1 (misslyckande).
Anmärkningar
Detta avsnitt diskuterar överväganden för data manipulationsspråk (DML) och datadefinitionsspråk (DDL)-triggers.
DML-utlösare
Det kan bara finnas en First och en Last trigger för varje påstående i en enda tabell.
Om en First trigger redan är definierad på tabellen, databasen eller servern kan du inte utse en ny trigger som First för samma tabell, databas eller server för samma @stmttype. Denna begränsning gäller Last även triggers.
Replikering genererar automatiskt en första trigger för varje tabell som ingår i en prenumeration på omedelbar uppdatering eller köad uppdatering. Replikation kräver att dess utlösare är den första utlösaren. Replikering ger ett fel när du försöker inkludera en tabell med en första trigger i en prenumeration på omedelbar uppdatering eller kö. Om du försöker göra en trigger till en första trigger efter att en tabell inkluderats i en prenumeration, sp_settriggerorder returneras ett fel. Om du använder ALTER TRIGGER på replikationstriggern, eller använder sp_settriggerorder för att ändra replikationstriggern till en Last eller None trigger, fungerar prenumerationen inte korrekt.
DDL-utlösare
Om en DDL-trigger med databasomfång och en DDL-utlösare med serveromfång finns på samma händelse, kan du specificera att båda utlösarna ska vara en First utlösare eller en Last utlösare. Server-scoped triggers aktiveras dock alltid först. Generellt sett är exekveringsordningen för DDL-triggers som finns på samma händelse följande:
- Servernivå-triggern markerad
First - Andra servernivå-triggers
- Servernivå-triggern markerad
Last - Databasnivå-triggern markerad
First - Andra databasnivå-triggers
- Databasnivå-triggern markerad
Last
Allmänna överväganden för utlösare
Om en ALTER TRIGGER sats ändrar en första eller sista trigger tas or-attributet FirstLast som ursprungligen sattes på triggern bort, och värdet ersätts med None. Ordervärdet måste återställas genom att använda sp_settriggerorder.
Om samma trigger måste anges som första eller sista order för mer än en satstyp måste sp_settriggerorder den köras för varje satstyp. Dessutom måste triggern först definieras för en statementtyp innan den kan utses som trigger First för Last den statementtypen.
Permissions
Att ställa in ordningen på en DDL-trigger med serveromfängd (skapad ON ALL SERVER) eller en inloggningsutlösare kräver CONTROL SERVER behörighet.
Att ställa in ordningen på en DDL-trigger med databasens omfattning (skapad ON DATABASE) kräver ALTER ANY DATABASE DDL TRIGGER behörighet.
Att ställa in ordningen på en DML-trigger kräver ALTER behörighet i tabellen eller vyn där triggern är definierad.
Examples
A. Ställ in avfyrningsordningen för en DML-avtryckare
Följande exempel specificerar att triggern uSalesOrderHeader är den första triggern som avfyras efter att en UPDATE operation har utförts på tabellen Sales.SalesOrderHeader .
USE AdventureWorks2022;
GO
EXECUTE sp_settriggerorder
@triggername = 'Sales.uSalesOrderHeader',
@order = 'First',
@stmttype = 'UPDATE';
B. Ställ in avfyrningsordningen för en DDL-avtryckare
Följande exempel specificerar att triggern ddlDatabaseTriggerLog är den första triggern som utlöses efter att en ALTER_TABLE händelse inträffat i databasen AdventureWorks2025 .
USE AdventureWorks2022;
GO
EXECUTE sp_settriggerorder
@triggername = 'ddlDatabaseTriggerLog',
@order = 'First',
@stmttype = 'ALTER_TABLE',
@namespace = 'DATABASE';