Bonjour tout le monde !

je viens vers vous car j'ai quelques difficultés avec mon trigger

Ce que je souhaite faire :
J'ai une table unites_stockage identifiée par un triplet cli/sce/us (varchar/varchar/int). Cette table contient une colonne "st" (varchar(2)).

Lorsque la colonne st de cette table est mise à jour avec la valeur 'X', je veux supprimer la ligne correspondante dans une autre table nommée "DemandeDestruction".

J'ai donc créé le trigger ci-dessous...


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE TRIGGER MAJSt ON UNITES_STOCKAGE
AFTER UPDATE
AS
       -- variables utilisées
       declare @status varchar(2), @cli varchar(10), @sce varchar(15), @us int;
 
       -- si st mis à jour
       if UPDATE(ST)
       begin
               -- récupération de la valeur mise à jour
               select @status=UNITES_STOCKAGE.st, @cli=UNITES_STOCKAGE.cli,
@sce=UNITES_STOCKAGE.sce, @us=UNITES_STOCKAGE.us from UNITES_STOCKAGE,
deleted d where UNITES_STOCKAGE.cli=d.cli
                       and UNITES_STOCKAGE.sce=d.sce and UNITES_STOCKAGE.us=d.us;
               begin
                        -- si cette valeur est X...
                       if(@status = 'X')
                       begin
                               -- ... suppression de la ligne correspondante
                               delete from DemandeDestruction where DemandeDestruction.cli=@cli
and DemandeDestruction.sce=@sce
                                       and DemandeDestruction.us=@us;
                       end
               end
       end
Mon problème est que lorsque l'update porte sur plusieurs lignes, une seule est supprimée dans la seconde table.

Je veux éviter d'utiliser un curseur, mais jee suis un peu perdu là, donc si vous pouvez m'éclairer ce serait cool

Merci par avance et bonne journée.