You are on page 1of 24

OBJECTIFS ATTENDUS

:

1.Créer un déclencheur 1.Supprimer un déclencheur 2.Modifier un déclencheur 3.Décrire le fonctionnement de Différents déclencheurs 4.Évaluer l'incidence de l'utilisation de déclencheurs sur les performances.

.

vous pouvez utiliser ces derniers pour implémenter des règles d'entreprise complexes qui assurent l'intégrité des données. Les déclencheurs servent souvent à implémenter l'intégrité référentielle ou la cohérence de données liées logiquement mais situées dans des tables différentes. .DEFINITION : Un déclencheur est une procédure stockée qui s'exécute lorsque les données d'une table sont modifiées. Comme les utilisateurs ne peuvent pas contourner l'exécution des déclencheurs.

.

Un déclencheur est un type particulier de procédure stockée qui s'exécute automatiquement lorsque les données qu'il protège sont modifiées. Les déclencheurs sont associés à des tables spécifiques. de mettre à jour ou de supprimer les données d'une table et qu'un déclencheur a été défini sur cette dernière pour l'une de ces actions. . ni accepter de paramètres. Ne peut pas être appelé directement Contrairement aux procédures stockées système standard. Appelé automatiquement Lorsqu'un utilisateur tente d'insérer. le déclencheur s'exécute automatiquement. Associé à une table Les déclencheurs sont définis sur une table spécifique. appelée table du déclencheur. Il est impossible de contourner son exécution. les déclencheurs ne peuvent pas être appelés directement et ne peuvent ni transmettre.

.Les définitions de déclencheurs peuvent inclure une instruction ROLLBACK TRANSACTION même en l'absence d'instruction BEGIN TRANSACTION explicite. tenez compte des instructions et points décrits ci-dessous.Fait partie d'une transaction Le déclencheur et l'instruction qui l'active sont traités comme une transaction unique pouvant être annulée à partir d'un point quelconque du déclencheur. Lorsque vous utilisez des déclencheurs. Il peut donc être nécessaire d'utiliser une clause RETURN dans une instruction IF pour empêcher le traitement d'autres instructions. l'ensemble de la transaction est annulé.si une instruction ROLLBACK TRANSACTION est présente. celle-ci est exécutée.Si une instruction suit l'instruction ROLLBACK TRANSACTION dans le script du déclencheur. . . .

.

.

Cette dernière spécifie la table sur laquelle le déclencheur est défini. ainsi que les instructions qui lui sont spécifiques. Syntaxe : . les événements pour lesquels il s'exécute.Création de déclencheurs Les déclencheurs sont créés à l'aide de l'instruction CREATE TRIGGER.

les informations qui lui sont associées sont insérées dans les tables système sysobjects et syscomments. UPDATE ou DELETE). Les deux syntaxes FOR et AFTER sont équivalentes puisqu'elles créent le même type de déclencheur. Les déclencheurs INSTEAD OF annulent l'action qui les a activés et exécutent une autre fonction à la place. Remarque : Lorsque vous créez un déclencheur. .Si une action FOR UPDATE est spécifiée. le nouveau déclencheur écrasera le déclencheur d'origine. syscomments Si vous créez un déclencheur en lui donnant le même nom qu'un déclencheur existant. qui s'active après l'action (INSERT. la clause IF UPDATE (colonne) peut être utilisée pour orienter l'action vers une colonne spécifique qui est mise à jour.

Si plusieurs enregistrements sont supprimés. Il vérifie le nombre d'enregistrements supprimés en interrogeant la table Deleted (supprimés). le déclencheur renvoie un message d'erreur personnalisé et annule la transaction. .Exemple : L'exemple ci-dessous crée un déclencheur sur la table NewEmployees (nouveaux employés) pour empêcher les utilisateurs de supprimer plusieurs employés à la fois. Le déclencheur s'active chaque fois qu'un enregistrement ou un groupe d'enregistrements est supprimé de la table.

L'instruction DELETE suivante active le déclencheur qui empêche l'exécution de la transaction : DELETE FROM NewEmployees WHERE EmployeeID > 6 L'instruction DELETE suivante active le déclencheur qui permet l'exécution de la transaction : DELETE FROM NewEmployees WHERE EmployeeID = 6 Proposer des exemples d¶utilisation des triggers J¶attends alors vos suggestions .

Modification et suppression de déclencheurs Changement de la définition sans suppression du déclencheur .

EXEMPLE : .

il est encore défini pour la table.Activation ou désactivation d'un déclencheur Vous pouvez activer ou désactiver un déclencheur spécifique ou tous les déclencheurs d'une table. les actions du déclencheur ne seront pas réalisées tant que le déclencheur n'aura pas été réactivé. Même si un déclencheur est désactivé. Vous pouvez activer ou désactiver des déclencheurs à l'aide de l'instruction ALTER TABLE. Syntaxe : ALTER TABLE table {ENABLE | DISABLE} TRIGGER {ALL | déclencheur[. si une instruction INSERT.«n]} . UPDATE ou DELETE est exécutée sur la table. Toutefois.

Les déclencheurs sont supprimés automatiquement lors de la suppression des tables qui les contiennent.Suppression d'un déclencheur Il est possible de supprimer un déclencheur. SYNTAXE : DROP TRIGGER déclencheur .

imbriqués et récursifs. UPDATE.Il est important de bien comprendre le fonctionnement des déclencheurs avant de les créer. . DELETE. On va décrire les déclencheurs INSERT. INSTEAD OF.

.Vous pouvez définir un déclencheur pour qu'il s'exécute chaque fois qu'une instruction INSERT insère des données dans une table.

La table inserted vous permet de faire référence aux données journalisées générées par l'instruction INSERT initiale. Cette dernière est une table logique qui contient une copie des lignes qui ont été insérées. . de nouvelles lignes sont ajoutées à la table des déclencheurs et à la table inserted (insérés).PRINCIPE DE FONCTIONNEMENT : Lors de l'activation d'un déclencheur INSERT. Le déclencheur peut examiner la table inserted pour déterminer si des actions doivent être réalisées et comment elles doivent l'être. Les lignes de la table inserted sont toujours des copies d'une ou de plusieurs lignes de la table des déclencheurs. Elle contient l'activité d'insertion journalisée engendrée par l'instruction INSERT.

ProductID = I.UnitsInStock ± I. USE Northwind GO CREATE TRIGGER OrdDet_Insert ON [Order Details] FOR INSERT AS UPDATE P SET UnitsInStock = (P.ProductID .EXEMPLE : Le déclencheur de cet exemple a été créé pour mettre à jour une colonne (UnitsInStock) dans la table Products chaque fois qu'un produit est commandé (c'est-à-dire. chaque fois qu'un enregistrement est inséré dans la table Order Details).Quantity) FROM Products AS P INNER JOIN Inserted AS I ON P. La nouvelle valeur correspond à la valeur précédente moins la quantité commandée.

EXERCICE D¶APPLICATION .

Par conséquent. Lorsque vous utilisez le déclencheur DELETE. . la table deleted et les tables de base de données n'ont pas de lignes en commun. les lignes supprimées de la table concernée sont placées dans une table deleted spéciale. Cette dernière est une table logique qui contient une copie des lignes qui ont été supprimées. La table deleted vous permet de faire référence aux données journalisées générées par l'instruction DELETE initiale. tenez compte QUE Lorsqu'une ligne est ajoutée à la table deleted elle n'existe plus dans la deleted. table de base de données.Fonctionnement d'un déclencheur DELETE Lors de l'activation d'un déclencheur DELETE.

chaque fois qu'un enregistrement es table Categories [catégories]). USE Northwind GO CREATE TRIGGER Category_Delete ON Categories FOR DELETE AS UPDATE P SET Discontinued = 1 FROM Products AS P INNER JOIN deleted AS d ON P.EXEMPLE : Le déclencheur de cet exemple a été créé pour mettre à jour la Discontinued (rupture stock) de la table Products chaque fois est supprimée (c'est-à-dire. Tous les produits affectés sont pour indiquer qu'ils sont en rupture de stock.CategoryID = d.CategoryID .