Dans l'exemple suivant, un déclencheur DDL affiche un message si un événement CREATE DATABASE se
produit sur l'instance du serveur actuelle. Il utilise la fonction EVENTDATA pour extraire le texte de
l'instruction Transact-SQL correspondante.
IF EXISTS (SELECT * FROM sys.server_triggers
WHERE name = 'ddl_trig_database')
DROP TRIGGER ddl_trig_database
ON ALL SERVER
GO
CREATE TRIGGER ddl_trig_database
ON ALL SERVER
FOR CREATE_DATABASE
AS
PRINT 'Base de données créée.'
SELECT
EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
GO
DROP TRIGGER ddl_trig_database
ON ALL SERVER
GO
EVENTDATA
Les informations sur un événement qui lance un déclencheur DDL sont capturées à l'aide de la fonction
EVENTDATA. Cette fonction retourne une valeur xml. Le schéma XML inclut des informations sur les
éléments suivants :
l'heure de l'événement ;
le SPID (System Process ID) de la connexion lorsque le déclencheur s'est exécuté ;
le type d'événement qui a lancé le déclencheur.
Attention :
EVENTDATA capture les données des événements CREATE_SCHEMA ainsi que l'<élément_de_schéma> de
la définition CREATE SCHEMA correspondante, s'il existe. En outre, EVENTDATA reconnaît la définition
<élément_de_schéma> en tant qu'événement distinct. En conséquence, un déclencheur DDL créé à la fois sur un
événement CREATE_SCHEMA et sur un événement représenté par l'<élément_de_schéma> de la définition
CREATE SCHEMA, peut retourner deux fois les mêmes données d'événement, telles que les données
TSQLCommand.
Implémentation de déclencheurs DDL
Les déclencheurs DDL au niveau du serveur figurent dans le dossier Déclencheurs de l'Explorateur d'objets de
SQL Server Management Studio. Ce dossier se situe sous le dossier Objets serveur. Les déclencheurs DDL au
niveau de la base de données figurent dans le dossier Database Triggers. Ce dossier se situe sous le dossier
Programmability de la base de données correspondante.
Modification de déclencheurs DDL
Si vous devez modifier la définition d'un déclencheur DDL, vous pouvez soit l'annuler, puis le recréer, soit
redéfinir le déclencheur existant en une seule opération.
Si vous changez le nom d'un objet référencé par un déclencheur DDL, vous devez modifier le déclencheur pour
que sa définition se réfère au nouveau nom de l'objet. Par conséquent, avant de renommer un objet, affichez les
dépendances de l'objet pour savoir si des déclencheurs peuvent être concernés par la modification projetée.
Un déclencheur peut aussi être modifié pour en chiffrer la définition.
L'exemple suivant crée un déclencheur DML qui envoie un message défini par l'utilisateur au client lorsqu'un
utilisateur tente d'ajouter ou de modifier les données de la table SalesPersonQuotaHistory. Le déclencheur est
ensuite modifié à l'aide de l'instruction ALTER TRIGGER pour n'appliquer le déclencheur qu'aux activités