Conception des déclencheurs DDL

Mis à jour : 12 décembre 2006

Avant de pouvoir concevoir un déclencheur DDL, les conditions suivantes sont requises :

  • Vous devez comprendre l'étendue des déclencheurs DDL.
  • Vous devez déterminer l'instruction ou le groupe d'instructions Transact-SQL qui active le déclencheur.
ms186406.security(fr-fr,SQL.90).gifRemarque relative à la sécurité :
Du code malveillant dans les déclencheurs peut s'exécuter sous des privilèges promus. Pour plus d'informations sur la manière de réduire cette menace, consultez Gestion de la sécurité liée aux déclencheurs.

Présentation de l'étendue des déclencheurs

Les déclencheurs DDL peuvent être activés en réponse à un événement Transact-SQL traité dans la base de données actuelle ou sur le serveur actuel. L'étendue du déclencheur dépend de l'événement. Par exemple, un déclencheur DDL créé pour être activé en réponse à un événement CREATE TABLE se déclenchera à chaque fois qu'un événement CREATE TABLE se produit dans la base de données. Un déclencheur DDL créé pour être activé en réponse à un événement CREATE LOGIN se déclenchera à chaque fois qu'un événement CREATE LOGIN se produit sur le serveur.

Dans l'exemple suivant, le déclencheur DDL safety est activé à chaque fois qu'un événement DROP TABLE ou ALTER TABLE se produit dans la base de données :

CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK
;

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. Pour plus d'informations sur l'utilisation de EVENTDATA avec les déclencheurs DDL, consultez Utilisation de la fonction EVENTDATA.

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 'Database Created.'
    SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
GO
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO

La liste qui mappe les instructions Transact-SQL aux étendues qui peuvent leur être spécifiées sont disponibles par l'intermédiaire des liens fournis dans la section « Sélection d'une instruction DDL particulière pour activer un déclencheur DDL », plus loin dans cette rubrique.

Les déclencheurs DDL dont l'étendue est la base de données sont stockés sous forme d'objets dans la base de données où ils sont créés. Les déclencheurs DDL peuvent être créés dans la base de données master ; ils se comportent exactement comme ceux créés dans les bases de données conçues par l'utilisateur. Des informations sur les déclencheurs DDL sont accessibles dans l'affichage catalogue sys.triggers du contexte de base de données dans lequel ils sont créés, ou en spécifiant le nom de la base de données comme identificateur, par exemple master.sys.triggers.

Les déclencheurs DDL dont l'étendue est le serveur sont stockés sous forme d'objets dans la base de données master. Toutefois, les informations sur les déclencheurs DDL dont l'étendue est le serveur sont accessibles dans la vue de catalogue sys.server_triggers de tous les contextes de base de données.

Pour plus d'informations sur l'extraction des métadonnées pour les déclencheurs DDL, consultez Obtention d'informations sur les déclencheurs DDL.

Les déclencheurs DDL ne sont pas activés en réponse à des événements qui concernent les tables et les procédures stockées temporaires locales ou globales.

Spécification d'une instruction ou d'un groupe d'instructions Transact-SQL

Les déclencheurs DDL peuvent être créés pour être activés en réponse aux événements suivants :

  • Une ou plusieurs instructions DDL particulières
  • Groupe prédéfini d'instructions DDL

Sélection d'une instruction DDL particulière pour activer un déclencheur DDL

Les déclencheurs DDL peuvent être conçus pour être activés après l'exécution d'une ou de plusieurs instructions Transact-SQL. Dans l'exemple précédent, le déclencheur safety est activé après un événement DROP TABLE ou ALTER TABLE quelconque.

Tous les événements DDL ne peuvent pas être utilisés pour activer les déclencheurs DDL. Certains événements sont destinés uniquement aux instructions asynchrones non transactionnelles. Par exemple, un événement ADD_ROLE_MEMBER ne peut pas être utilisé pour activer un déclencheur DDL. Vous devez utiliser les notifications d'événements dans ces situations. Pour plus d'informations sur les notifications d'événements, consultez Notifications d'événements (Moteur de base de données).

La rubrique Événements DDL à utiliser avec des déclencheurs DLL présente les instructions Transact-SQL qui peuvent être spécifiées pour activer un déclencheur DDL et l'étendue sur laquelle elles peuvent être activées.

Sélection d'un groupe prédéfini d'instructions DDL pour activer un déclencheur DDL

Un déclencheur DDL peut être activé après l'exécution d'un événement Transact-SQL quelconque appartenant à un groupe prédéfini d'événements comparables. Par exemple, si vous souhaitez activer un déclencheur DDL après l'exécution d'une instruction CREATE TABLE, ALTER TABLE ou DROP TABLE quelconque, vous pouvez spécifier FOR DDL_TABLE_EVENTS dans l'instruction CREATE TRIGGER. Après l'exécution de CREATE TRIGGER, les événements qui sont couverts par un groupe d'événements sont ajoutés à la vue de catalogue sys.trigger_events.

La rubrique Groupes d'événements à utiliser avec des déclencheurs DDL répertorie les groupes prédéfinis d'instructions DDL disponibles pour les déclencheurs DDL, les instructions particulières qu'ils couvrent et les étendues auxquelles ces groupes d'événements peuvent être programmés.

Voir aussi

Concepts

Utilisation de la fonction EVENTDATA
Description des déclencheurs DDL
Implémentation de déclencheurs DDL

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Contenu modifié :
  • Correction d'informations inexactes qui établissaient qu'un événement CREATE_DATABASE ne pouvait pas être utilisé pour activer un déclencheur DDL. Cet événement a été remplacé par ADD_ROLE_MEMBER comme exemple d'un événement pouvant être utilisé pour déclencher une notification d'événements, mais pas un déclencheur DDL.

17 juillet 2006

Contenu modifié :
  • Mise à jour du second exemple « Présentation de l'étendue des déclencheurs ».