Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

ALTER TRIGGER (Transact-SQL)

Modifica la definizione di un trigger DML, DDL o LOGON precedentemente creato dall'istruzione CREATE TRIGGER. I trigger vengono creati tramite l'istruzione CREATE TRIGGER. Possono essere creati direttamente dalle istruzioni Transact-SQL o dai metodi di assembly creati in Microsoft .NET Framework Common Language Runtime (CLR) e caricati in un'istanza di SQL Server. Per ulteriori informazioni sui parametri utilizzati nell'istruzione ALTER TRIGGER, vedere CREATE TRIGGER (Transact-SQL).

Si applica a: SQL Server (SQL Server 2008 tramite versione corrente), Database SQL di Windows Azure (versione iniziale tramite versione corrente).

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

-- SQL Server Syntax 
Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
ALTER TRIGGER schema_name.trigger_name 
ON  ( table | view ) 
[ WITH <dml_trigger_option> [ ,...n ] ]
 ( FOR | AFTER | INSTEAD OF ) 
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } 
[ NOT FOR REPLICATION ] 
AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME <method specifier> 
[ ; ] } 

<dml_trigger_option> ::=
    [ ENCRYPTION ]
    [ <EXECUTE AS Clause> ]

<method_specifier> ::=
    assembly_name.class_name.method_name 

Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE statement (DDL Trigger)

ALTER TRIGGER trigger_name 
ON { DATABASE | ALL SERVER } 
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type [ ,...n ] | event_group } 
AS { sql_statement [ ; ] | EXTERNAL NAME <method specifier> 
[ ; ] }
} 

<ddl_trigger_option> ::=
    [ ENCRYPTION ]
    [ <EXECUTE AS Clause> ]

<method_specifier> ::=
    assembly_name.class_name.method_name 

Trigger on a LOGON event (Logon Trigger)
ALTER TRIGGER trigger_name 
ON ALL SERVER 
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR| AFTER } LOGON 
AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier >
  [ ; ] }

<logon_trigger_option> ::=
    [ ENCRYPTION ]
    [ EXECUTE AS Clause ]

<method_specifier> ::= 
    assembly_name.class_name.method_name
-- Windows Azure SQL Database Syntax  
Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger) 

ALTER TRIGGER schema_name. trigger_name 
ON (table | view ) 
 [ WITH <dml_trigger_option> [ ,...n ] ] 
 ( FOR | AFTER | INSTEAD OF ) 
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } 
AS { sql_statement [ ; ] [...n ] } 

<dml_trigger_option> ::= 
    [ <EXECUTE AS Clause> ] 

Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE statement (DDL Trigger) 

ALTER TRIGGER trigger_name 
ON { DATABASE } 
 [ WITH <ddl_trigger_option> [ ,...n ] ] 
{ FOR | AFTER } { event_type [ ,...n ] | event_group } 
AS { sql_statement 
[ ; ] }
} 

<ddl_trigger_option> ::= 
    [ <EXECUTE AS Clause> ] 

schema_name

Nome dello schema a cui appartiene un trigger DML. L'ambito dei trigger DML è definito nello schema della tabella o della vista in cui sono i trigger stessi creati. schema _name è facoltativo solo se il trigger DML e la tabella o la vista corrispondente appartengono allo schema predefinito. schema_name non può essere specificato per trigger DDL o LOGON.

trigger_name

Trigger esistente da modificare.

table | view

Tabella o vista nella quale viene eseguito il trigger DML. Il nome completo della tabella o vista è facoltativo.

DATABASE

Applica l'ambito di un trigger DDL al database corrente. Se viene specificato questo parametro, il trigger viene attivato quando si verifica un tipo di evento specificato in event_type o event_group nel database corrente.

ALL SERVER

Si applica a: SQL Server 2008 tramite SQL Server 2014.

Applica l'ambito di un trigger DDL o LOGON al server corrente. Se viene specificato questo parametro, il trigger viene attivato quando si verifica un tipo di evento specificato in event_type o event_group nel server corrente.

WITH ENCRYPTION

Si applica a: SQL Server 2008 tramite SQL Server 2014.

Imposta la crittografia delle voci sys.syscomments sys.sql_modules contenenti il testo dell'istruzione ALTER TRIGGER. Tramite il parametro WITH ENCRYPTION è possibile evitare la pubblicazione del trigger come parte della replica di SQL Server. Non è possibile specificare WITH ENCRYPTION per i trigger CLR.

Nota Nota

Se si crea un trigger tramite WITH ENCRYPTION, occorre specificarlo nuovamente nell'istruzione ALTER TRIGGER affinché questa opzione rimanga abilitata.

EXECUTE AS

Specifica il contesto di sicurezza nel quale viene eseguito il trigger. Consente di controllare l'account utente utilizzato dall'istanza di SQL Server per convalidare le autorizzazioni su ogni oggetto di database a cui fa riferimento il trigger.

Per ulteriori informazioni, vedere Clausola EXECUTE AS (Transact-SQL).

AFTER

Specifica che il trigger viene attivato solo dopo la corretta esecuzione dell'istruzione di trigger SQL. È inoltre necessario che tutte le operazioni referenziali di propagazione e le verifiche dei vincoli siano state completate correttamente prima che il trigger venga attivato.

Se viene specificata solo la parola chiave FOR, AFTER è il valore predefinito.

È possibile definire i trigger AFTER DML solo nelle tabelle.

INSTEAD OF

Specifica che il trigger DML viene eseguito al posto dell'istruzione di trigger SQL. Il trigger risulta pertanto prioritario rispetto alle azioni delle istruzioni di trigger. Non è possibile specificare INSTEAD OF per i trigger DDL o LOGON.

In una tabella o vista è possibile definire al massimo un trigger INSTEAD OF per ogni istruzione INSERT, UPDATE o DELETE. È tuttavia possibile definire viste che fanno riferimento ad altre viste. Ogni vista include un trigger INSTEAD OF.

I trigger INSTEAD OF non sono supportati in viste create con la clausola WITH CHECK OPTION. Se un trigger INSTEAD OF viene aggiunto a una vista per la quale è stato specificato WITH CHECK OPTION, SQL Server genera un errore. Per poter definire il trigger INSTEAD OF, è necessario rimuovere l'opzione tramite l'istruzione ALTER VIEW.

{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } | { [INSERT ] [ , ] [ UPDATE ] }

Specifica quali istruzioni di modifica dei dati eseguite nella tabella o vista attivano il trigger DML. È necessario specificare almeno un'opzione. Nella definizione di trigger è consentita qualsiasi combinazione delle opzioni nell'ordine desiderato. Se vengono specificate più opzioni, è necessario separarle con una virgola.

Per i trigger INSTEAD OF, l'opzione DELETE non è consentita in tabelle contenenti una relazione referenziale che specifica un'operazione di propagazione ON DELETE. In modo analogo, l'opzione UPDATE non è consentita in tabelle contenenti una relazione referenziale che specifica un'operazione di propagazione ON UPDATE. Per ulteriori informazioni, vedere ALTER TABLE (Transact-SQL).

event_type

Nome di un evento del linguaggio Transact-SQL che, dopo l'esecuzione, attiva un trigger DDL. Gli eventi supportati dai trigger DDL sono elencati in Eventi DDL.

event_group

Nome di un raggruppamento predefinito di eventi del linguaggio Transact-SQL. Il trigger DDL viene attivato dopo l'esecuzione di qualsiasi evento del linguaggio Transact-SQL appartenente a event_group. I gruppi di eventi supportati dai trigger DDL sono elencati in Gruppi di eventi DDL. Dopo il completamento dell'esecuzione di ALTER TRIGGER, event_group funge anche da macro aggiungendo i relativi tipi di evento che include alla vista del catalogo sys.trigger_events.

NOT FOR REPLICATION

Si applica a: SQL Server 2008 tramite SQL Server 2014.

Indica che il trigger non deve essere eseguito quando un agente di replica modifica la tabella coinvolta nel trigger.

sql_statement

Condizioni e azioni del trigger.

EXTERNAL NAME <method_specifier>

Si applica a: SQL Server 2008 tramite SQL Server 2014.

Specifica il metodo di un'assembly da associare al trigger. Il metodo non deve accettare nessun argomento e restituire void. class_name deve essere un identificatore di SQL Server valido e deve esistere come una classe nell'assembly con visibilità dell'assembly. La classe non può essere nidificata.

Per ulteriori informazioni sull'istruzione ALTER TRIGGER, vedere la sezione Osservazioni in CREATE TRIGGER (Transact-SQL).

Nota Nota

Le opzioni EXTERNAL_NAME e ON_ALL_SERVER non sono disponibili in un database indipendente.

Trigger DML

L'istruzione ALTER TRIGGER supporta viste ad aggiornamento manuale tramite trigger INSTEAD OF in tabelle e viste. SQL Server applica ALTER TRIGGER allo stesso modo per tutti i tipi di trigger (AFTER, INSTEAD-OF).

È possibile specificare il primo e l'ultimo trigger AFTER che si desidera eseguire in una tabella tramite sp_settriggerorder. È possibile specificare solo un primo e un ultimo trigger AFTER in una tabella. Se nella stessa tabella sono inclusi altri trigger AFTER, vengono eseguiti in modo casuale.

Se il primo o l'ultimo trigger viene modificato tramite un'istruzione ALTER TRIGGER, l'attributo first (primo) o last (ultimo) impostato per il trigger modificato viene rimosso ed è necessario reimpostare il valore di ordinamento tramite sp_settriggerorder.

Un trigger AFTER viene eseguito solo dopo il completamento dell'esecuzione dell'istruzione SQL di attivazione, comprese tutte le operazioni referenziali di propagazione e le verifiche di vincolo associate all'oggetto aggiornato o eliminato. L'operazione di trigger AFTER controlla gli effetti dell'istruzione di trigger e tutte le operazioni UPDATE e DELETE referenziali di propagazione attivate con l'istruzione di trigger.

Quando un'operazione DELETE in una tabella figlio o di riferimento è il risultato di un'operazione CASCADE su un'operazione DELETE eseguita dalla tabella padre e viene definito un trigger INSTEAD OF per DELETE nella tabella figlio, il trigger viene ignorato mentre l'operazione DELETE viene eseguita.

Trigger DDL

Diversamente dai trigger DML, i trigger DDL non sono definiti a livello di ambito di schema. Pertanto, non è possibile utilizzare OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY e OBJECTPROPERTY(EX) durante l'esecuzione di query sui metadati relativi ai trigger DDL. Utilizzare in alternativa le viste del catalogo. Per ulteriori informazioni, vedere Ottieni informazioni sui trigger DDL.

Trigger LOGON

Database SQL di Windows Azure non supporta i trigger sugli eventi di accesso.

Per modificare un trigger DML è richiesta l'autorizzazione ALTER per la tabella o la vista in cui è definito il trigger.

Per modificare un trigger DDL definito con ambito server (ON ALL SERVER) o un trigger LOGON è necessaria l'autorizzazione CONTROL SERVER nel server. Per modificare un trigger DDL definito con ambito database (ON DATABASE) è necessaria l'autorizzazione ALTER ANY DATABASE DDL TRIGGER nel database corrente.

Nell'esempio seguente viene creato un trigger DML per la stampa di un messaggio definito dall'utente nel client quando un utente aggiunge o modifica i dati della tabella SalesPersonQuotaHistory. Il trigger viene quindi modificato tramite ALTER TRIGGER per applicare il trigger soltanto sulle attività INSERT. Questo trigger risulta molto utile, in quanto ricorda all'utente che aggiorna o inserisce righe nella tabella di inviare una notifica al reparto Compensation.

USE AdventureWorks2012;
GO
IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
    DROP TRIGGER Sales.bonus_reminder;
GO
CREATE TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
WITH ENCRYPTION
AFTER INSERT, UPDATE 
AS RAISERROR ('Notify Compensation', 16, 10);
GO
-- Now, change the trigger.
USE AdventureWorks2012;
GO
ALTER TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
AFTER INSERT
AS RAISERROR ('Notify Compensation', 16, 10);
GO

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft