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.

Icona di collegamento a un argomentoConvenzioni 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.

    ms186762.note(it-it,SQL.90).gifImportante:
    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

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Nuovo contenuto:
  • Aggiunta in tutto l'argomento di informazioni sui trigger LOGON introdotti in SQL Server 2005 Service Pack 2.