Share via


Trigger DML

Un trigger DML è un tipo speciale di stored procedure che diventa effettiva automaticamente quando viene eseguito un evento del linguaggio DML (Data Manipulation Language) che influisce sulla vista o tabella definita nel trigger. Gli eventi DML includono istruzioni INSERT, UPDATE o DELETE. I trigger DML possono essere utilizzati per applicare regole 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 del trigger DML

I trigger DML sono simili ai vincoli in quanto sono in grado di applicare l'integrità di entità o di dominio. L'integrità di entità dovrebbe essere sempre applicata al livello più basso utilizzando indici che fanno parte dei vincoli PRIMARY KEY e UNIQUE oppure creati indipendentemente dai vincoli. Per applicare l'integrità di dominio è consigliabile utilizzare i vincoli CHECK, mentre per applicare l'integrità referenziale (RI) è consigliabile utilizzare i vincoli FOREIGN KEY. I trigger DML sono particolarmente utili quando le caratteristiche supportate dai vincoli non sono in grado di 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.

  • 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. I vincoli FOREIGN KEY consentono di convalidare un valore di colonna soltanto se corrisponde esattamente al valore di un'altra colonna, a meno che la clausola REFERENCES non definisca un'operazione referenziale di propagazione.

  • Assicurano la protezione contro operazioni INSERT, UPDATE e DELETE dannose o non corrette e applicano altre restrizioni più complesse rispetto a quelle definite con i vincoli CHECK.

    A differenza dei vincoli CHECK, i trigger DML possono fare riferimento alle colonne di altre tabelle. Un trigger, ad esempio, può utilizzare un'istruzione SELECT di un'altra tabella per eseguire il confronto con i dati inseriti o aggiornati e per eseguire ulteriori operazioni, ad esempio la modifica di dati o la visualizzazione di 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 o DELETE) in una tabella consentono di eseguire più operazioni 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 impediscono di apportare modifiche che violano l'integrità referenziale o consentono di eseguirne il rollback, annullando in tal modo il tentativo di modifica dei dati. Un trigger di questo tipo potrebbe essere attivato quando si modifica una chiave esterna e il nuovo valore non corrisponde alla chiave primaria. A questo scopo tuttavia vengono normalmente utilizzati i vincoli FOREIGN KEY.

  • Gli eventuali vincoli inclusi nella tabella di trigger vengono verificati dopo l'esecuzione del trigger INSTEAD OF e prima dell'esecuzione del trigger AFTER. In caso di violazione dei vincoli, viene eseguito il rollback delle azioni del trigger INSTEAD OF e il trigger AFTER non viene eseguito.

Tipi di trigger DML

  • Trigger AFTER
    I trigger AFTER vengono eseguiti dopo l'esecuzione dell'azione associata all'istruzione INSERT, UPDATE, MERGE o DELETE. I trigger AFTER non vengono mai eseguiti sei si verifica una violazione di un vincolo, pertanto non possono essere utilizzati per elaborazioni che potrebbero impedire violazioni dei vincoli. Per ogni istruzione INSERT, UPDATE o DELETE specificata in un'istruzione MERGE, viene generato il trigger corrispondente per ogni operazione DML.

  • Trigger INSTEAD OF
    I trigger INSTEAD OF sostituiscono le azioni standard dell'istruzione di trigger. È pertanto possibile definire un trigger per eseguire il controllo degli errori o dei valori in una o più colonne e quindi eseguire ulteriori 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 trigger INSTEAD OF consiste nel fatto che consentono alle viste non aggiornabili di supportare gli aggiornamenti. Una vista basata su più tabelle di base, ad esempio, deve utilizzare un trigger INSTEAD OF per supportare inserimenti, aggiornamenti ed eliminazioni che fanno riferimento a dati inclusi in più tabelle. Un altro vantaggio dei trigger INSTEAD OF è rappresentato dal fatto che consentono di scrivere il codice in modo da rifiutare parti di un batch accettandone altre.

    Nella tabella seguente è riportato un confronto tra le funzionalità dei trigger AFTER e INSTEAD OF.

    Funzione

    Trigger AFTER

    Trigger INSTEAD OF

    Applicabilità

    Tabelle

    Tabelle e viste

    Quantità per tabella o vista

    Multiplo per azione di trigger (UPDATE, DELETE e INSERT)

    Singolo per azione di trigger (UPDATE, DELETE e INSERT)

    Riferimenti di propagazione

    Nessuna restrizione

    I trigger INSTEAD OF UPDATE e DELETE non sono consentiti in tabelle che rappresentano le destinazioni di vincoli di integrità per operazioni referenziali di propagazione

    Esecuzione

    Dopo:

    • Elaborazione dei vincoli

    • Operazioni referenziali dichiarative

    • Creazione di tabelle inserted e deleted

    • Operazione di trigger

    Prima di:

    • Elaborazione dei vincoli

    In sostituzione di:

    • Operazione di trigger

    Dopo:

    • Creazione di tabelle inserted e deleted

    Ordine di esecuzione

    È possibile specificare la prima e l'ultima esecuzione

    Non applicabile

    Riferimenti di colonna varchar(max), nvarchar(max) e varbinary(max) in tabelle inserted e deleted

    Consentiti

    Consentiti

    Riferimenti di colonna text, ntext e image in tabelle inserted e deleted

    Non consentiti

    Consentite

  • Trigger CLR
    I trigger CLR includono i trigger AFTER e INSTEAD OF. Un trigger CLR può essere anche un trigger DDL. 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à

Argomento

Viene illustrato come creare un trigger DML.

Creare trigger DML.

Viene illustrato come creare un trigger CLR.

Creazione di trigger CLR

Viene descritto come creare un trigger DML per la gestione delle modifiche sia della singola riga che di più righe.

Creazione di trigger DML per gestire più righe di dati

Viene descritto come annidare trigger.

Creazione di trigger annidati

Viene descritto come specificare l'ordine in cui vengono generati trigger AFTER.

Specifica dei primi e degli ultimi trigger

Viene descritto come utilizzare le tabelle speciali inserted e deleted nel codice del trigger.

Utilizzo delle tabelle inserite ed eliminate

Viene descritto come modificare o rinominare un trigger DML.

Modifica o ridenominazione di trigger DML

Viene descritto come visualizzare informazioni sui trigger DML.

Ottieni informazioni sui trigger DML

Vengono descritte le modalità di creazione, modifica e disabilitazione dei trigger DML.

Eliminare o disabilitare trigger DML

Viene descritto come gestire la sicurezza dei trigger.

Gestione della sicurezza dei trigger

Vedere anche

Riferimento

CREATE TRIGGER (Transact-SQL)

ALTER TRIGGER (Transact-SQL)

DROP TRIGGER (Transact-SQL)

DISABLE TRIGGER (Transact-SQL)

Concetti

Funzioni trigger (Transact-SQL)