sp_settriggerorder (Transact-SQL)
Data aggiornamento: 12 dicembre 2006
Specifica il primo o l'ultimo trigger AFTER attivato. Gli altri trigger AFTER vengono attivati in base a un ordine non definito.
Convenzioni della sintassi Transact-SQL
Sintassi
sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername'
, [ @order = ] 'value'
, [ @stmttype = ] 'statement_type'
[ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]
Argomenti
- [ @triggername= ] '[ triggerschema**.****] triggername**'**
Nome del trigger e schema al quale appartiene, se applicabile, il cui ordine deve essere impostato o modificato. [triggerschema**.**]triggername è di tipo sysname. Se il nome specificato non corrisponde a un trigger oppure corrisponde a un trigger INSTEAD OF, viene restituito un errore. Non è possibile specificare triggerschema per i trigger DDL o LOGON.
[ @order= ] 'value'
Impostazione del nuovo ordine del trigger. value è di tipo varchar(10). I possibili valori sono i seguenti.Importante:
I trigger First e Last devono essere due trigger distinti. Valore Descrizione First
Trigger avviato per primo.
Last
Trigger avviato per ultimo.
None
Il trigger viene attivato in base a un ordine non definito.
[ @stmttype= ] 'statement_type'
Specifica l'istruzione SQL che attiva il trigger. statement_type è di tipo varchar(50) e i possibili valori sono INSERT, UPDATE, DELETE, LOGON oppure qualsiasi evento dell'istruzione Transact-SQL elencato in Eventi DDL utilizzabili con i trigger DDL. Non è possibile specificare gruppi di eventi.È possibile designare un trigger come First o Last per un tipo di istruzione solo dopo che è stato definito come trigger per tale tipo di istruzione. Il trigger TR1, ad esempio, può essere designato come First per l'istruzione INSERT eseguita nella tabella T1 se TR1 è definito come trigger INSERT. Motore di database di SQL Server 2005 restituisce un errore se TR1, che è stato definito solo come trigger INSERT, viene impostato come trigger First o Last per un'istruzione UPDATE. Per ulteriori informazioni, vedere la sezione Osservazioni.
- @namespace= { 'DATABASE' | 'SERVER' | NULL }
Se triggername è un trigger DDL o LOGON, specifica se triggername è stato creato con ambito database o ambito server. Si noti che i trigger LOGON possono essere creati solo con ambito server. Per ulteriori informazioni sull'ambito dei trigger DDL, vedere Progettazione di trigger DDL. Se omesso oppure se si specifica NULL, triggername è un trigger DML.
Osservazioni
Per ogni istruzione in una tabella specifica possono essere presenti solo un trigger First e un trigger Last.
Se nella tabella, nel database o nel server è già stato definito un trigger First, non è possibile definire un nuovo trigger First per la stessa tabella, lo stesso database o lo stesso server per lo stesso argomento statement_type. Questa limitazione vale anche per i trigger Last.
La replica genera automaticamente il primo trigger per qualsiasi tabella inclusa in una sottoscrizione ad aggiornamento immediato o ad aggiornamento in coda. La replica richiede che il proprio 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 cerca di impostare un trigger come primo trigger dopo l'inclusione di una tabella in una sottoscrizione, la stored procedure sp_settriggerorder restituisce un errore. Se si utilizza l'istruzione ALTER TRIGGER nel trigger di replica oppure si utilizza la stored procedure sp_settriggerorder per modificare il trigger di replica in un trigger di tipo Last o None, la sottoscrizione non funziona correttamente.
Se tramite un'istruzione ALTER TRIGGER viene modificato un trigger designato come First o Last, l'attributo First o Last impostato inizialmente nel trigger viene sostituito con None. Il valore dell'ordine di esecuzione deve essere reimpostato tramite sp_settriggerorder.
Se uno stesso trigger deve essere designato come trigger First o Last per più tipi di istruzione, è necessario eseguire sp_settriggerorder per ogni tipo di istruzione. Inoltre, per poter designare un trigger come First o Last per un determinato tipo di istruzione, è prima necessario definirlo per tale tipo di istruzione.
Autorizzazioni
Per impostare l'ordine di attivazione di un trigger DDL o LOGON con ambito server (creato tramite l'istruzione ON ALL SERVER), è necessario disporre dell'autorizzazione CONTROL SERVER.
Per impostare l'ordine di attivazione di un trigger DDL nell'ambito del database (creato tramite l'istruzione ON DATABASE), è necessario disporre dell'autorizzazione ALTER ANY DATABASE DDL TRIGGER.
Per impostare l'ordine di attivazione di un trigger DML, è necessario disporre dell'autorizzazione ALTER per la tabella o vista in cui è stato definito il trigger.
Valori restituiti
0 (esito positivo) o 1 (esito negativo)
Esempi
A. Impostazione dell'ordine di attivazione per un trigger DML
Nell'esempio seguente il trigger uSalesOrderHeader
viene definito come primo trigger da attivare dopo l'esecuzione di un'operazione UPDATE
nella tabella Sales.SalesOrderHeader
.
USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';
B. Impostazione dell'ordine di attivazione per un trigger DDL
Nell'esempio seguente il trigger ddlDatabaseTriggerLog
viene definito come primo trigger da attivare dopo che si è verificato un evento ALTER_TABLE
nel database AdventureWorks
.
USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';
Vedere anche
Riferimento
Stored procedure di sistema (Transact-SQL)
Stored procedure del Motore di database (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
12 dicembre 2006 |
|