sp_settriggerorder (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

Gibt die AFTER-Trigger an, die zuerst oder zuletzt ausgelöst werden. Die AFTER-Trigger, die zwischen dem ersten und letzten Trigger ausgelöst werden, werden in einer nicht definierten Reihenfolge ausgeführt.

Gilt für: SQL Server (SQL Server 2008 bis zur aktuellen Version), Azure SQL-Datenbank.

Topic link icon Transact-SQL-Syntaxkonventionen

  
sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername'   
    , [ @order = ] 'value'   
    , [ @stmttype = ] 'statement_type'   
    [ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]  

[ @triggername= ] '[ triggerschema.] triggername'
Der Name des Triggers, dessen Reihenfolge ggf. festgelegt oder geändert wird, und das Schema, zu dem er gehört. [triggerschema.] Auslösername ist Sysname. Wenn der Name keinem Trigger entspricht oder wenn der Name dem INSTEAD OF-Trigger entspricht, gibt die Prozedur einen Fehler zurück. Triggerschema kann für DDL- oder Logon-Trigger angegeben werden.

[ @order= ] 'value'
Die Einstellung für die neue Reihenfolge des Triggers. Wert ist varchar(10) und eine der folgenden Werte sind möglich.

System_CAPS_ICON_important.jpg Wichtig


Die erste und letzten Trigger müssen zwei unterschiedliche Trigger sein.

WertDescription
ErsteTrigger wird zuerst ausgelöst
LetzteTrigger wird zuletzt ausgelöst
KeineTrigger wird in nicht definierter Reihenfolge ausgelöst

[ @stmttype= ] 'statement_type'
Gibt die SQL-Anweisung an, die den Trigger auslöst. Statement_type ist varchar(50)-Spalte möglich INSERT-, Update-, DELETE-, LOGON oder eine Transact-SQL anweisungsereignisses abgelesen DDL-Ereignisse. Ereignisgruppen können nicht angegeben werden.

Ein Trigger kann als festgelegt werden, als die erste oder letzten Trigger für einen Anweisungstyp erst nach, dass Trigger als Trigger für diesen Anweisungstyp definiert wurde. Beispielsweise ausgelöst TR1 kann gekennzeichnet werden erste für die Einfügung in Tabelle T1 Wenn TR1 als ein INSERT-Trigger definiert ist. Die Datenbankmodul gibt einen Fehler zurück, wenn TR1, die nur als INSERT-Trigger definiert ist, wird als festgelegt eine erste, oder letzten, Trigger für eine UPDATE-Anweisung. Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

@namespace= { 'DATABASE' | 'SERVER' | NULL}
Wenn Auslösername wird ein DDL-Trigger ** @namespace ** gibt an, ob Auslösername mit Datenbankbereich oder einem Serverbereich erstellt wurde. Wenn Auslösername ist ein Logon-Trigger SERVER muss angegeben werden. Weitere Informationen zu DDL-Triggerbereich, finden Sie unter DDL-Trigger. Wenn nicht angegeben, oder wenn NULL angegeben ist, Auslösername ein DML-Trigger.

SERVER gilt für: SQL Server 2008 bis SQL Server 2016.

0 (Erfolg) oder 1 (Fehler)

Es kann nur eine erste eine letzten Trigger für jede Anweisung für eine einzelne Tabelle.

Wenn eine erste Trigger bereits für die Tabelle, die Datenbank oder den Server definiert ist, Sie können nicht festlegen, keinen neuen Trigger als erste für die gleiche Tabelle, Datenbank oder für den gleichen Server Statement_type. Diese Einschränkung gilt auch letzten Trigger.

Die Replikation generiert automatisch einen ersten Trigger für alle Tabellen, die in einem Abonnement mit sofortigem Update oder verzögertem Update über eine Warteschlange enthalten sind. Für die Replikation gilt, dass ihr Trigger der erste Trigger sein muss. Die Replikation meldet einen Fehler, wenn Sie versuchen, eine Tabelle, die einen ersten Trigger aufweist, in ein Abonnement mit sofortigem Update bzw. verzögertem Update über eine Warteschlange einzufügen. Wenn Sie versuchen, einen Trigger zum ersten Trigger zu erklären, nachdem eine Tabelle in ein Abonnement aufgenommen wurde, gibt sp_settriggerorder einen Fehler zurück. Wenn Sie ALTER TRIGGER für den Replikationstrigger verwenden oder Sp_settriggerorder so ändern Sie den Replikationstrigger in einen letzten oder keine Trigger, das Abonnement nicht ordnungsgemäß funktioniert.

Wenn für das gleiche Ereignis ein DDL-Triggers mit Datenbankbereich und ein DDL-Trigger mit Serverbereich vorhanden sind, können Sie angeben, dass beide Trigger eine erste Trigger oder eine letzten Trigger. Trigger mit einem Serverbereich werden jedoch immer zuerst ausgelöst. Im Allgemeinen ist die Reihenfolge der Auslösung von DDL-Triggern für das gleiche Ereignis Folgende:

  1. Markiert den Trigger auf Serverebene erste.

  2. Weitere Trigger auf Serverebene

  3. Markiert den Trigger auf Serverebene letzten.

  4. Markiert den Trigger auf Datenbankebene erste.

  5. Weitere Trigger auf Datenbankebene

  6. Markiert den Trigger auf Datenbankebene letzten.

Wenn eine ALTER TRIGGER-Anweisung einen ersten oder letzten Trigger ändert die erste oder letzten Attribut, das ursprünglich für den Trigger festgelegt wurde, gelöscht und der Wert wird durch ersetzt keine. Der Reihenfolgewert muss mithilfe von Sp_settriggerorder.

Wenn derselbe Trigger muss, als den ersten oder letzten Auftrag für mehr als einen Anweisungstyp festgelegt werden Sp_settriggerorder muss für jeden Anweisungstyp ausgeführt werden. Auch der Trigger muss definiert werden, zuerst für einen Anweisungstyp bevor als festgelegt werden, kann die erste oder letzten Trigger für den Anweisungstyp ausgelöst.

Um die Reihenfolge eines DDL-Triggers mit Serverbereich (erstellt ON ALL SERVER) oder eines LOGON-Triggers festzulegen, ist die CONTROL SERVER-Berechtigung auf dem Server erforderlich.

Um die Reihenfolge eines DDL-Triggers mit Datenbankbereich (erstellt ON DATABASE) festzulegen, benötigen Sie die Berechtigung ALTER ANY DATABASE DDL TRIGGER.

Um die Reihenfolge eines DML-Triggers festzulegen, benötigen Sie die ALTER-Berechtigung für die Tabelle oder Sicht, in der der Trigger definiert wurde.

A. Festlegen der Auslösungsreihenfolge für einen DML-Trigger

Im folgenden Beispiel wird angegeben, dass Trigger uSalesOrderHeader der erste Trigger ist, der nach Abschluss eines UPDATE-Vorgangs in der Sales.SalesOrderHeader-Tabelle ausgelöst wird.

USE AdventureWorks2012;  
GO  
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';  

B. Festlegen der Auslösungsreihenfolge für einen DDL-Trigger

Im folgenden Beispiel wird angegeben, dass Trigger ddlDatabaseTriggerLog der erste Trigger ist, der nach einem ALTER_TABLE-Ereignis in der AdventureWorks2012-Datenbank ausgelöst wird.

USE AdventureWorks2012;  
GO  
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';  

Gespeicherte Systemprozeduren (Transact-SQL)
Gespeicherte Datenbankmodulprozeduren (Transact-SQL)
ALTER TRIGGER (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen: