APSQL

Désactiver un déclencheur

Pour permettre la bonne exécution de certaines instructions il est parfois nécessaire de désactiver un trigger de base de données de façon temporaire.

Pour réaliser cette opération SQL Server propose l'instruction suivante:

ALTER TABLE laTable DISABLE TRIGGER leTrigger;

L'activation est alors possible par la commande:

ALTER TABLE laTable ENABLE TRIGGER leTrigger;

Si ces instructions fonctionnent bien elles presentent quelques incovénients:

  • La désactivation du déclencheur est effectuée pour toutes les connexions et donc rien ne garanti (sauf à démarrer en mode mono utilisateur) qu'une autre opération ne soit pas réalisée en même temps,
  • Pour désactiver un déclencheur il est nécessaire de connaitre son nom exact,
  • Enfin, il faut penser à activer le déclencheur, lorsque l'opération est finie.

Si les 2 premiers points sont contraignants, il est quand même relativement facile de réaliser l'opération de désactivation, par contre pour le dernier point rien ne permet de rendre automatique l'activation des déclencheurs désactivés.

Pour échapper à cette problématique il est préférable de faire appel à Context_Info. La valeur de cette variable est définie au niveau de chaque session. Il suffit alors depuis le déclencheur d'éxaminer la valeur de Context_Info afin de décider des opérations à effectuer.

Le plus simple est d'illustrer par un exemple. Soit le déclencheur suivant

Déclencheur utilisant CONTEXT_INFO

Il est alors possible de définir la valeur de Context_Info au niveau de chaque session comme l'illustre l'exemple suivant

Exemple d'utilisation de CONTEXT_INFO