Vous êtes sur la page 1sur 15

École Marocaine des Sciences de l’Ingénieur

Filière: IIR

Microsoft SQL Server


et Transact SQL
Prof. Zakaria KHATAR

SQL Server - Transact SQL


INTRODUCTION

Langage Transact SQL (T-SQL)


Les Triggers (Déclencheurs)

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


Définition
Les triggers (déclencheurs) en Transact-SQL (T-SQL) sont des procédures stockées qui
s’exécutent automatiquement quand un événement se produit. En général cet
événement représente une opération LMD (Langage de Manipulation de données)
sur une table. Les instructions LMD doivent inclure INSERT, UPDATE ou DELETE.

Rôle des triggers :


 Contrôler les accès à la base de données
 Assurer la fiabilité et l’intégrité des données
 Garantir l’intégrité référentielle (DELETE, ou UPDATE CASCADE)

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


Syntaxe du Trigger en Transact-SQL
La syntaxe générale pour créer un Trigger en Transact-SQL est la suivante :

CREATE [ OR ALTER ] TRIGGER nom_du_trigger


ON nom_de_la_table/vue
AFTER (FOR) / INSTEAD OF {INSERT, UPDATE, DELETE}
AS
-- Les instructions SQL à exécuter lorsque le déclencheur est activé

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


les clauses FOR, AFTER et INSTEAD OF de Triggers
Les clauses FOR, AFTER et INSTEAD OF sont utilisés pour spécifier le moment où un
déclencheur (trigger) sera exécuté par rapport à une opération sur une table.
Clause Description
La clause AFTER indique que le déclencheur sera exécuté après
AFTER/FOR
l'opération (INSERT, UPDATE, DELETE) sur la table.

La clause INSTEAD OF indique que le déclencheur sera exécuté à la


INSTEAD OF
place de l'opération sur la table.

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


les clauses FOR, AFTER et INSTEAD OF de Triggers

Pratiquement, il n'y a pas de différence majeure dans le fonctionnement des


déclencheurs lorsqu'on utilise les clauses FOR ou AFTER.
Les deux clauses peuvent être utilisées pour atteindre des résultats similaires en
termes d'exécution des déclencheurs après les opérations sur la table/vue.

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


Tables temporaires : Inserted et Deleted
Lorsqu'un trigger est exécuté en raison d'un événement INSERT, UPDATE ou DELETE,
SQL Server crée deux tables temporaires spéciales : la table inserted et la table
deleted.

 La Table Inserted stocke les copies des lignes affectées par l'événement
INSERT ou UPDATE. Dans le cas d'un INSERT, elle contient les nouvelles lignes
insérées. Dans le cas d'un UPDATE, elle contient les valeurs après la mise à jour.

 La Table Deleted stocke les anciennes lignes affectées par l'événement DELETE
ou UPDATE. Pour un DELETE, elle contient les lignes supprimées. Pour un
UPDATE, elle contient les valeurs avant la mise à jour.

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


Exemple : Le trigger suivant se déclenche après chaque ajout d'un nouveau professeur et
affiche un message :

CREATE TRIGGER tr_apres_ajout_professeur


ON Professeur AFTER INSERT
AS
BEGIN
PRINT 'Un nouveau professeur a été ajouté.';
END;

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


Exemple : Le trigger suivant bloque la suppression des enregistrements dans la table
"Professeur" et affiche un message indiquant de contacter le support.

CREATE TRIGGER tr_blocage_suppression_professeur


ON Professeur INSTEAD OF DELETE
AS
BEGIN
PRINT 'La suppresion est bloquée pour l’instant,
contactez le support';
END;

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


Exemple : Le trigger suivant se déclenche après chaque ajout d'un nouveau professeur avec info :
CREATE TRIGGER tr_apres_ajout_professeur_info
ON Professeur AFTER INSERT
AS
BEGIN
DECLARE @id_enseignant int;
DECLARE @nom_professeur varchar(50);
DECLARE @prenom_professeur varchar(50);

SELECT @id_enseignant = id_enseignant, @nom_professeur = nom,


@prenom_professeur = prenom FROM inserted;

PRINT 'Un nouveau professeur a été ajouté : ' + @prenom_professeur +


' ' + @nom_professeur + ', ID: ' + CAST(@id_enseignant AS
varchar(10));
END;
SQL Server/Transact SQL – Prof. Zakaria KHATAR
LANGAGE Transact-SQL

Les Triggers en T-SQL :


La Clause ROLLBACK :

Opération Déclencheur AFTER/FOR Déclencheur INSTEAD OF


Annule toutes les modifications faites
Généralement, il n'a pas d'effet car le
dans la transaction en cours, y compris
déclencheur est exécuté à la place de
l'action (INSERT, UPDATE, DELETE) qui a
l'action qui a déclenché le déclencheur.
ROLLBACK déclenché le déclencheur.
Aucune modification n'est faite avant que
Il y a certains cas où vous devez gérer les
le déclencheur INSTEAD OF ne soit
erreurs survenant à l'intérieur des
exécuté, donc il n'y a rien à annuler.
déclencheurs.

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


Fonctions utiles dans les triggers en T-SQL :

Fonction/Variable Description
Fonction qui vérifie si la colonne spécifiée a été mise à jour dans
UPDATE(NomColonne) l'opération de mise à jour en cours. Renvoie une valeur
booléenne (1 ou 0).
Fonction qui renvoie le nombre de lignes affectées par l'opération
ROWCOUNT_BIG() en cours (INSERT, UPDATE ou DELETE). Utile pour effectuer des
actions en fonction du nombre de lignes affectées.

SQL Server/Transact SQL – Prof. Zakaria KHATAR


LANGAGE Transact-SQL

Les Triggers en T-SQL :


Exemple : Le trigger suivant teste si le nombre de professeurs dépasse 50 après chaque ajout :
CREATE TRIGGER tr_calcul_nombre_professeurs
ON Professeur AFTER INSERT AS
BEGIN
DECLARE @nombre_professeurs int;
SELECT @nombre_professeurs = COUNT(*) FROM Professeur;

IF @nombre_professeurs > 50
BEGIN
PRINT 'Le nombre de professeurs dépasse 50.';
ROLLBACK;
END
ELSE
BEGIN
PRINT 'Le nombre de professeurs est actuellement de ' +
CAST(@nombre_professeurs AS varchar(10)) + '.';
END
END;
SQL Server/Transact SQL – Prof. Zakaria KHATAR
LANGAGE Transact-SQL

Les Triggers en T-SQL :


Exemple : Supposons que nous voulons envoyer un message à chaque fois qu'un nouvel élève
est ajouté à une classe. Nous pouvons utiliser un trigger AFTER INSERT pour cela :
CREATE TRIGGER tr_nouvel_eleve
ON Eleve
AFTER INSERT
AS
BEGIN
DECLARE @nom_classe varchar(50);
DECLARE @nom_eleve varchar(50);
DECLARE @prenom_eleve varchar(50);

SELECT @nom_eleve = i.nom, @prenom_eleve = i.prenom, @nom_classe = c.nom


FROM inserted i
JOIN Classe c ON i.id_classe = c.id_classe;

PRINT 'Un nouvel élève, ' + @prenom_eleve + ' ' + @nom_eleve + ', a été
ajouté à la classe ' + @nom_classe;
END;
SQL Server/Transact SQL – Prof. Zakaria KHATAR
INTRODUCTION

TRAVAUX PRATIQUES - NUMÉRO 9


Langage Transact SQL (T-SQL)
Les Triggers (Déclencheurs)

SQL Server/Transact SQL – Prof. Zakaria KHATAR

Vous aimerez peut-être aussi