Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Il trigger DML è un tipo speciale di stored procedure che diventa automaticamente effettivo quando si verifica un evento DML (Data Manipulation Language) che influisce sulla tabella o sulla vista definita nel trigger. Gli eventi DML includono INSERT
, UPDATE
o DELETE
. I trigger DML possono essere utilizzati per applicare regole di business e l'integrità dei dati, eseguire query su altre tabelle e includere istruzioni Transact-SQL complesse. Il trigger e l'istruzione che lo attiva vengono considerati come una singola transazione, di cui è possibile eseguire il rollback dal trigger stesso. Se viene rilevato un errore grave, ad esempio un'insufficienza di spazio su disco, viene eseguito automaticamente il rollback dell'intera transazione.
Vantaggi
I trigger DML sono simili ai vincoli in quanto sono in grado di applicare l'integrità di entità o di dominio. In generale, l'integrità delle entità deve essere sempre applicata al livello più basso dagli indici che fanno parte dei vincoli PRIMARY KEY
e UNIQUE
, o vengono creati indipendentemente dai vincoli. L'integrità del dominio deve essere applicata tramite CHECK
vincoli e l'integrità referenziale deve essere applicata tramite FOREIGN KEY
vincoli. I trigger DML sono più utili quando le funzionalità supportate dai vincoli non possono soddisfare le esigenze funzionali dell'applicazione.
Nell'elenco seguente i trigger DML vengono confrontati con i vincoli e vengono identificati i casi in cui i trigger DML presentano vantaggi rispetto ai vincoli.
I trigger DML consentono di propagare le modifiche nelle tabelle correlate del database, tuttavia è possibile eseguire le modifiche in modo più efficiente utilizzando vincoli di integrità referenziale di propagazione.
FOREIGN KEY
I vincoli possono convalidare un valore di colonna solo con una corrispondenza esatta con un valore in un'altra colonna, a meno che laREFERENCES
clausola non definisca un'azione referenziale a catena.Possono proteggersi da operazioni dannose o errate
INSERT
,UPDATE
eDELETE
, e applicare altre restrizioni più complesse rispetto ai vincoli definiti conCHECK
.A differenza dei
CHECK
vincoli, i trigger DML possono fare riferimento a colonne in altre tabelle. Ad esempio, un trigger può usare un oggetto daSELECT
un'altra tabella per confrontare i dati inseriti o aggiornati e per eseguire altre azioni, ad esempio modificare i dati o visualizzare un messaggio di errore definito dall'utente.Consentono di valutare lo stato di una tabella prima e dopo la modifica dei dati e di eseguire le operazioni appropriate sulla base delle differenze.
Più trigger DML dello stesso tipo (
INSERT
,UPDATE
oDELETE
) in una tabella consentono l'esecuzione di più azioni diverse in risposta alla stessa istruzione di modifica.I vincoli sono in grado di segnalare errori soltanto tramite messaggi di errore standard di sistema. Se nell'applicazione è necessario o consigliabile utilizzare messaggi personalizzati e gestire gli errori in modo più complesso, è necessario utilizzare un trigger.
I trigger DML possono impedire o eseguire il rollback delle modifiche che violano l'integrità referenziale, annullando così il tentativo di modifica dei dati. Un trigger di questo tipo potrebbe essere attivo quando si modifica una chiave esterna e il nuovo valore non corrisponde alla relativa chiave primaria. Tuttavia,
FOREIGN KEY
i vincoli vengono in genere usati a questo scopo.Se esistono vincoli nella tabella dei trigger, vengono controllati dopo l'esecuzione del
INSTEAD OF
trigger, ma prima dell'esecuzione delAFTER
trigger. Se i vincoli vengono violati, le azioni del triggerINSTEAD OF
vengono sottoposte a rollback e il triggerAFTER
non viene eseguito.
Tipi di trigger DML
Trigger AFTER
AFTER
i trigger vengono eseguiti dopo che viene eseguita l'azione dell'istruzione INSERT
, UPDATE
, MERGE
o DELETE
.
AFTER
i trigger non vengono mai eseguiti se si verifica una violazione del vincolo. Pertanto, questi trigger non possono essere usati per alcuna elaborazione che potrebbe impedire violazioni dei vincoli. Per ogni azione INSERT
, UPDATE
o DELETE
specificata in un'istruzione MERGE
, il trigger corrispondente viene attivato per ogni operazione DML.
Trigger INSTEAD OF
INSTEAD OF
i trigger sostituiscono le azioni standard della dichiarazione di attivazione. Pertanto, possono essere usate per eseguire il controllo degli errori o dei valori su una o più colonne ed eseguire altre azioni prima di inserire, aggiornare o eliminare la riga o le righe. Quando, ad esempio, quando il valore aggiornato in una colonna relativa alla paga oraria in una tabella degli stipendi supera un valore specificato, è possibile definire un trigger per generare un messaggio di errore ed eseguire il rollback della transazione oppure inserire un nuovo record in un itinerario di controllo prima di inserire il record nella tabella degli stipendi. Il vantaggio principale dei INSTEAD OF
trigger è che abilitano le visualizzazioni che non sarebbero aggiornabili per supportare gli aggiornamenti. Ad esempio, una vista basata su più tabelle di base deve usare un INSTEAD OF
trigger per supportare inserimenti, aggiornamenti ed eliminazioni che fanno riferimento ai dati in più tabelle. Un altro vantaggio dei INSTEAD OF
trigger è che consentono di codificare la logica che può rifiutare parti di un batch, consentendo ad altre parti di un batch di avere esito positivo.
Questa tabella confronta la funzionalità dei trigger AFTER
e INSTEAD OF
.
Funzione |
AFTER Attivatore |
INSTEAD OF Attivatore |
---|---|---|
Applicabilità | Tabelle | Tabelle e viste |
Quantità per tabella o vista | Multiplo per azione di attivazione (UPDATE , DELETE e INSERT ) |
Una per azione di attivazione (UPDATE , DELETE e INSERT ) |
Riferimenti di propagazione | Nessuna restrizione |
INSTEAD OF UPDATE e DELETE i trigger non sono consentiti nelle tabelle che sono destinazioni di vincoli di integrità referenziale a catena. |
Esecuzione | Dopo: Elaborazione dei vincoli Operazioni referenziali dichiarative Creazione delle tabelle inserted e deleted Operazione di trigger |
Prima: elaborazione dei vincoli Invece di: operazione di trigger Dopo la creazione delle tabelle inserted e deleted |
Ordine di esecuzione | È possibile specificare il primo e l'ultima esecuzione | Non applicabile |
riferimenti alle colonne varchar(max), nvarchar(max)e varbinary(max) in inserted e deleted tabelle |
Consentito | Consentito |
riferimenti a colonne text, ntext e image in inserted e deleted tabelle |
Non consentito | Consentito |
Attivatore CLR
Un trigger CLR (Common Language Runtime) può essere un AFTER
trigger o INSTEAD OF
. Un trigger CLR può anche essere un trigger DDL (Data Definition Language). Anziché eseguire una stored procedure Transact-SQL, un trigger CLR consente di eseguire uno o più metodi scritti in codice gestito che sono membri di un assembly creato in .NET Framework e caricato in SQL Server.
Attività correlate
Attività | Articolo |
---|---|
Viene illustrato come creare un trigger DML. | Creare trigger DML |
Viene illustrato come creare un trigger CLR. | Creare trigger CLR |
Viene descritto come creare un trigger DML per la gestione delle modifiche sia della singola riga che di più righe. | Creare trigger DML per gestire più righe di dati |
Viene descritto come annidare trigger. | Creazione di trigger annidati |
Si descrive come specificare l'ordine in cui i trigger AFTER vengono attivati. |
Specificare i primi e gli ultimi trigger |
Viene descritto come utilizzare le tabelle speciali inserted e deleted nel codice del trigger. | Usare le tabelle delle righe inserite e delle righe eliminate |
Viene descritto come modificare o rinominare un trigger DML. | Modificare o rinominare trigger DML |
Viene descritto come visualizzare informazioni sui trigger DML. | Recuperare informazioni sui trigger DML |
Vengono descritte le modalità di creazione, modifica e disabilitazione dei trigger DML. | Eliminare e disabilitare trigger DML |
Viene descritto come gestire la sicurezza dei trigger. | Gestire la sicurezza dei trigger |