Aller au contenu

Exercices⚓︎

Exercice 1⚓︎

Le trigger suivant interdit la modification des commandes

Correction
🐬 SQL
Create Trigger Tr_Empêcher_Modif
On Commande
For Update
As
Rollback

Exercice 2⚓︎

Le trigger suivant interdit la modification du numéro de commande et vérifie si la date saisie pour la date de commande est supérieure ou égale à la date du jour

Correction
🐬 SQL
Create Trigger Tr_Empêcher_Modif_Numcom
On Commande
For Update
As
if update(NumCom)
    Begin
    Raiserror('le numéro de commande ne peut être modifié',15,120)
    Rollback
End
if update(DatCom)
    Begin
    if ((select count (DatCom) from inserted
        Where datediff(day,datcom,getdate() )>0)<> 0)
        Begin
        Raiserror('La date de commande ne peut pas être inférieur à la date en cours',15,120)
        Rollback
    End
End

Exercice 3⚓︎

Le trigger suivant empêche la suppression des commandes ayant des articles associés Remarque : Ce trigger ne se déclenchera pas s'il existe une contrainte clé étrangère entre le champ NumCom de la table ligneCommande et le champ NumCom de la table commande.

Correction
🐬 SQL
Create Trigger Tr_Empêcher_Suppr
On Commande
For Delete
As
Declare @a int
set @a =(Select count(numart) from lignecommande, deleted where lignecommande.numcom =deleted.numcom)
if (@a>0)
Begin
Raiserror('Opération annulée. Une ou plusieurs commandes ont des articles enregistrés',15,120)
Rollback
End

Exercice 4⚓︎

Le trigger suivant à l'ajout d'une ligne de commande vérifie si les quantités sont disponibles et met le stock à jour

Correction
🐬 SQL
Create Trigger Tr_Ajouter_Ligne
On LigneCommande
For Insert
As
Declare @a int
set @a=(select count(numart) from inserted, article
where article.numart = inserted.numart
and QteCommandee >QteEnStock)
if (@a >0)
Begin
Raiserror('Ajout refusé. Quantités demandées non disponibles en stock',15,120)
Rollback
End
Else
Update article set QteEnStock = QteEnStock 
(select Sum(QteCommandee) from inserted where
article.NumArt=inserted.NumArt)
From article, inserted where inserted.numart=article.numart

Exercice 5⚓︎

Le trigger suivant à la modification d'une ligne de commande vérifie si les quantités sont disponibles et met le stock à jour

Correction

🐬 SQL
Create Trigger Tr_Modifier_Ligne
On LigneCommande
For Update
As
Declare @a int
set @a=(select count(numart) from inserted, deleted, article
where article.numart = inserted.numart
and article.numart = deleted.numart
and inserted.QteCommandee > QteEnStock+deleted.QteCommandee)
if (@a >0)
Begin
Raiserror('Modification refusée. Quantités demandées non disponibles en stock',15,120)
Rollback
End
Else
update article set QteEnStock = QteEnStock
+ (select Sum(QteCommandee) from deleted where deleted.NumArt=Article.NumArt)
  (select Sum(QteCommandee) from inserted where
inserted.NumArt=Article.NumArt)
From article, inserted, deleted
where inserted.numart = article.numart
and article.numart = deleted.numart
Remarque : Si le trigger déclenché effectue une opération sur une autre table, les triggers associés à cette table sont alors déclenchés (principe de cascade)