Bonjour à tous et à toutes;
Je viens enfin de faire fonctionner mes triggers DELETE, UPDATE et INSERT mais j'ai un souci lors de la suppression multi-lignes du type : DELETE FROM maTable.
J'explique :
J'ai deux tables qui sont ECRITURE et CONSOLIDATION; a chaque ajout, suppression ou modification d'une ligne dans la table ECRITURE je veux que la table CONSOLIDATION soit mise à jour. Ecriture par écriture cela fonctionne parfaitement bien pour les INSERT, les UPDATE et les DELETE (trois triggers); mais lorsque j'effectue des modifications multiples dans la table ECRITURE, la table CONSOLIDATION se met partiellement à jour (exemple de la requête : DELETE FROM ECRITURE)
Voici le code du trigger (traitement après suppression) :
Voici le code de la procédure stockée CONSOLIDATION_MAJ :
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 ALTER TRIGGER [dbo].[MAJ_DELETE] ON [dbo].[ECRITURE] AFTER DELETE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for trigger here DECLARE @Annee int; DECLARE @Mois int; --Récupération des valeurs ANNEE et MOIS de la ligne d'ECRITURE supprimée SELECT @Annee = E.ANNEE , @mois = E.MOIS FROM deleted E --Mise à jour des montants de CREDIT et de DEBIT de la table CONSOLIDATION EXECUTE dbo.CONSOLIDATION_MAJ @Mois, @Annee END
Si quelqu'un peut m'expliquer le problème ça serait super
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 ALTER PROCEDURE [dbo].[CONSOLIDATION_MAJ] -- Add the parameters for the stored procedure here @Mois int, @Annee int AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here UPDATE CONSOLIDATION SET CREDIT = (SELECT COALESCE(SUM(COALESCE(E.CREDIT, 0)),0) FROM ECRITURE AS E WHERE (E.ANNEE = @Annee and E.MOIS = @mois)), DEBIT = (SELECT COALESCE(SUM(COALESCE(E.DEBIT, 0)),0) FROM ECRITURE AS E WHERE (E.ANNEE = @Annee and E.MOIS = @mois)) WHERE (CONSOLIDATION.ANNEE = @Annee and CONSOLIDATION.MOIS = @mois) END
Par avance merci;
Alex01
Partager