Mise en œuvre des déclencheurs DML

Tenez compte des points suivants avant de créer un déclencheur DML :

  • L'instruction CREATE TRIGGER doit être la première instruction du lot. Toutes les autres instructions qui suivent dans ce lot sont interprétées comme faisant partie de la définition de l'instruction CREATE TRIGGER.
  • L'autorisation de créer des déclencheurs DML revient par défaut au propriétaire de la table, qui ne peut pas la transmettre à d'autres utilisateurs.
  • Les déclencheurs DML sont des objets de base de données et leur nom doit respecter les règles gouvernant les identificateurs.
  • Vous pouvez créer un déclencheur DML uniquement dans la base de données en cours, bien que celui-ci puisse référencer des objets hors de cette base de données.
  • Bien que les déclencheurs DML puissent faire référence à des tables temporaires, ils ne peuvent pas être créés sur une table système ou temporaire. Les tables système ne doivent pas être référencées ; utilisez plutôt les vues des schémas d'information.
  • Les déclencheurs INSTEAD OF DELETE et INSTEAD OF UPDATE ne peuvent pas être définis sur une table dont une clé étrangère est définie avec une action DELETE ou UPDATE.
  • Bien qu'une instruction TRUNCATE TABLE ait les mêmes effets qu'une instruction DELETE dépourvue de clause WHERE (elle supprime toutes les lignes), elle ne peut pas activer les déclencheurs DELETE du fait que l'instruction TRUNCATE TABLE n'est pas inscrite au journal.
  • L'instruction WRITETEXT ne provoque pas l'activation des déclencheurs INSERT ou UPDATE.
ms187834.note(fr-fr,SQL.90).gifImportant :
La possibilité de renvoyer des ensembles de résultats à partir de déclencheurs sera supprimée dans une version future de SQL Server. Les déclencheurs qui renvoient des ensembles de résultats peuvent provoquer une modification inattendue du comportement des applications non conçues pour fonctionner avec ces déclencheurs. Évitez d'intégrer des déclencheurs qui renvoient des ensembles de résultats dans le développement de nouvelles applications et prévoyez de modifier celles qui le font actuellement. Pour empêcher les déclencheurs de renvoyer des ensembles de résultats dans SQL Server 2005, attribuez à l'Option disallow results from triggers la valeur 1. La valeur par défaut de cette option sera 1 dans une version future de SQL Server.

Pour créer un déclencheur DML, vous devez spécifier :

  • son nom ;
  • la table sur laquelle il est défini ;
  • le moment auquel il est activé ;
  • les instructions de modification des données qui l'activent, les options valides étant INSERT, UPDATE ou DELETE (un même déclencheur peut être activé par plusieurs instructions de modification des données). Ainsi, un déclencheur peut être activé simultanément par les instructions INSERT et UPDATE ;
  • les instructions de programmation qui réalisent des actions de déclencheur.

Déclencheurs DML multiples

Une table peut comporter plusieurs déclencheurs d'un type donné à condition que ceux-ci portent des noms différents. Chaque déclencheur peut exécuter de nombreuses fonctions. Un déclencheur donné ne peut porter que sur une seule table mais il peut s'appliquer à n'importe quel sous-ensemble de trois actions utilisateur (UPDATE, INSERT et DELETE).

Une table ne peut posséder qu'un seul déclencheur INSTEAD OF d'un type donné.

Autorisations et propriété des déclencheurs

Les déclencheurs sont créés dans le schéma de la table ou de la vue sur laquelle ils sont définis. Par exemple, si le déclencheur Trigger1 est créé sur la table HumanResources.Employee, le nom qualifié par un schéma de ce déclencheur est HumanResources.Trigger1.

Les autorisations CREATE TRIGGER reviennent par défaut au propriétaire de la table sur laquelle est défini le déclencheur, au rôle de serveur fixe sysadmin et aux membres des rôles de base de données fixes db_owner et db_ddladmin. Ces autorisations ne sont pas transmissibles.

Si un déclencheur INSTEAD OF est créé sur une vue, la chaîne de propriété est rompue si le propriétaire de la vue ne possède pas également les tables de base référencées par la vue et le déclencheur. Si une table de base n'est pas détenue par le propriétaire de la vue, le propriétaire de la table doit accorder séparément les autorisations nécessaires à tout utilisateur effectuant des opérations de lecture ou de mise à jour sur la vue. Si un même utilisateur est le propriétaire de la vue mais aussi des tables de base sous-jacentes, les autorisations qu'il accorde aux autres utilisateurs ne peuvent porter que sur la vue, et non sur telle ou telle table de base. Pour plus d'informations, consultez Chaînes de propriétés.

Pour créer un déclencheur