Implementazione di trigger DML

Prima di creare un trigger DML, tenere presente quanto segue:

  • L'istruzione CREATE TRIGGER deve essere la prima del batch e tutte le istruzioni successive vengono interpretate come parte della definizione della prima istruzione CREATE TRIGGER.

  • L'autorizzazione per la creazione di trigger DML viene assegnata per impostazione predefinita al proprietario della tabella, che non può trasferirla ad altri utenti.

  • I trigger DML sono oggetti di database e devono rispettare le regole di denominazione degli identificatori.

  • È possibile creare trigger DML solo nel database corrente, anche se essi possono fare riferimento a oggetti esterni a tale database.

  • Non è possibile creare un trigger DML in una tabella temporanea o di sistema, tuttavia i trigger DML possono fare riferimento a tabelle temporanee. Non è consigliabile fare riferimento alle tabelle di sistema. Utilizzare invece le viste degli schemi delle informazioni.

  • Non è possibile definire un trigger INSTEAD OF DELETE e INSTEAD OF UPDATE in una tabella che include una chiave esterna in cui è definita un'azione DELETE o UPDATE.

  • Un'istruzione TRUNCATE TABLE è simile a un'istruzione DELETE senza la clausola WHERE (elimina tutte le righe), tuttavia non attiva i trigger DELETE perché l'istruzione TRUNCATE TABLE non è registrata nel log.

  • L'istruzione WRITETEXT non attiva i trigger INSERT o UPDATE.

Nota importanteImportante

A partire da una delle versioni successive di SQL Server non sarà più supportata la restituzione di set di risultati dai trigger. I trigger che restituiscono set di risultati possono provocare comportamenti imprevisti nelle applicazioni che non sono state progettate per il loro utilizzo. Evitare di restituire set di risultati dai trigger in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni che attualmente li restituiscono. Per impedire che i trigger restituiscano set di risultati in SQL Server, impostare Opzione disallow results from triggers su 1. L'impostazione predefinita per questa opzione sarà 1 nella prossima versione di SQL Server.

Quando si crea un trigger DML, è necessario specificare le informazioni seguenti:

  • Il nome.

  • La tabella in cui viene definito il trigger.

  • Quando verrà attivato il trigger.

  • Le istruzioni di modifica dei dati che attivano il trigger. Le opzioni valide sono INSERT, UPDATE o DELETE. Più istruzioni di modifica dei dati possono attivare lo stesso trigger, ad esempio un trigger può essere attivato dalle istruzioni INSERT e UPDATE.

  • Le istruzioni di programmazione che eseguono l'azione del trigger.

Trigger DML multipli

In una tabella possono essere disponibili più trigger AFTER di un tipo specifico, a condizione che a ogni trigger venga assegnato un nome diverso. Ogni trigger può eseguire numerose funzioni. Ogni trigger può tuttavia essere applicato a una sola tabella, benché sia possibile applicare un singolo trigger a qualsiasi subset delle tre azioni dell'utente (UPDATE, INSERT e DELETE).

In ogni tabella può essere presente un solo trigger INSTEAD OF di un tipo specifico.

Autorizzazioni e proprietà dei trigger

I trigger vengono creati nello schema della tabella o della vista in cui sono definiti. Se, ad esempio, il trigger Trigger1 viene creato nella tabella HumanResources.Employee, il nome del trigger con specificazione dello schema sarà HumanResources.Trigger1.

Le autorizzazioni per l'istruzione CREATE TRIGGER vengono assegnate per impostazione predefinita al proprietario della tabella in cui è definito il trigger, ai membri del ruolo predefinito del server sysadmin e ai membri dei ruoli predefiniti del database db_owner e db_ddladmin e non sono trasferibili.

Quando si crea un trigger INSTEAD OF in una vista, la catena di proprietà viene interrotta se il proprietario della vista non è anche proprietario delle tabelle di base a cui fanno riferimento la vista e il trigger. Se il proprietario di una tabella di base non è lo stesso della vista, è necessario che il proprietario della tabella conceda separatamente agli utenti le autorizzazioni necessarie per la lettura e l'aggiornamento della vista. Se il proprietario della vista è anche il proprietario delle tabelle di base sottostanti, è necessario che conceda agli altri utenti solo le autorizzazioni per la vista e non per le singole tabelle di base. Per ulteriori informazioni, vedere Catene di proprietà.

Per creare un trigger