Bonjour,
j'ai un trigger sur insert dans sur une table lhisto.
j'ai 2000 Lignes dans ma table lhisto_temp
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 ALTER TRIGGER [TRI_CalculStat] ON [dbo].[LHisto] AFTER INSERT AS declare @idlhisto int declare @CodeSociete int declare @idUG int declare @DateVente datetime declare @CodeArticle int declare @CodeReglement int declare @pointSubvar int set @idlhisto = -1 if not exists (Select UseTrigger FROM servicelanceur where UseTrigger =1) BEGIN RETURN END SELECT @idlhisto = i.idlhisto, @CodeSociete = c.codesociete, @idUG = i.codeUG, @DateVente = i.datevente, @CodeArticle = codearticle, @CodeReglement = Codereglement, @pointSubvar = coalesce(pointsubvar,0) FROM inserted as i INNER JOIN CLient as c ON c.codeclient = i.codeclient AND c.affectation = i.affectation WHERE Typeligne = 1 AND codeevenement = 'VT' and (codeLot = 0 OR CodeLot = CodeArticle) and (codemenu = 0 OR codemenu = codearticle) AND (Saisiedirecte = 0 OR (saisiedirecte = 1 AND Codereglement NOT IN (8,11))) IF @IdLhisto > 0 BEGIN IF @pointSubvar = 0 BEGIN IF @CodeReglement <> 8 AND @CodeReglement <> 11 BEGIN exec Trigger_FactureAuto @idlhisto, @CodeSociete, @idUG, @DateVente, @CodeArticle END ELSE BEGIN exec Trigger_FactureManuelle @Idlhisto END END ELSE BEGIN IF @CodeReglement <> 8 AND @CodeReglement <> 11 BEGIN exec Trigger_FacturePointSubVar @Idlhisto END END END
j'exécute la requete suivante :
Mon trigger ne se déclenche pas ou plutôt, il se déclenche seulement pour la dernière ligne insérée...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 INSERT INTO LHisto (TypeLigne, CodeCaisse, CodeUD, CodeRU, CodeUG, CodeCrous, DateVente, CodeArticle, CodeEvenement, NumeroTicketCaisse, Ligne, Quantite, Prix, CodeReglement, Libelle1, Libelle2, Libelle3, Libelle4, Libelle5, CodeClient, Affectation, Cycle, Solde, NumeroTicketLie, CodeLot, CodeMenu, BadgeSociete, BadgeTarif, BadgeRegion, BadgeNom, BadgeValidite, BadgeCaution, BadgeFidelite, BadgeJetons, Taux_TVA, PrixHT, PartSociete, PartSocieteHTCalculee, NumCB, DateService, Service, UAIRne, Differe, NombrePoint, PointSubVar) SELECT TypeLigne, CodeCaisse, CodeUD, CodeRU, CodeUG, CodeCrous, DateVente, CodeArticle, CodeEvenement, NumeroTicketCaisse, Ligne, Quantite, Prix, CodeReglement, Libelle1, Libelle2, Libelle3, Libelle4, Libelle5, CodeClient, REPLACE(Affectation, 'IDT', '0'), Cycle, Solde, NumeroTicketLie, CodeLot, CodeMenu, BadgeSociete, BadgeTarif, BadgeRegion, BadgeNom, BadgeValidite, BadgeCaution, BadgeFidelite, BadgeJetons, Taux_TVA, PrixHT, PartSociete, PartSociete, NumCB, DateService, Service, UAIRne, Differe, NombrePoint, PointSubVar FROM LHisto_Temp, Vue_Lieux
si je fais
qui ne renvoie qu'une seule ligne, alors il s'execute.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 INSERT INTO LHisto (TypeLigne, CodeCaisse, CodeUD, CodeRU, CodeUG, CodeCrous, DateVente, CodeArticle, CodeEvenement, NumeroTicketCaisse, Ligne, Quantite, Prix, CodeReglement, Libelle1, Libelle2, Libelle3, Libelle4, Libelle5, CodeClient, Affectation, Cycle, Solde, NumeroTicketLie, CodeLot, CodeMenu, BadgeSociete, BadgeTarif, BadgeRegion, BadgeNom, BadgeValidite, BadgeCaution, BadgeFidelite, BadgeJetons, Taux_TVA, PrixHT, PartSociete, PartSocieteHTCalculee, NumCB, DateService, Service, UAIRne, Differe, NombrePoint, PointSubVar) SELECT TypeLigne, CodeCaisse, CodeUD, CodeRU, CodeUG, CodeCrous, DateVente, CodeArticle, CodeEvenement, NumeroTicketCaisse, Ligne, Quantite, Prix, CodeReglement, Libelle1, Libelle2, Libelle3, Libelle4, Libelle5, CodeClient, REPLACE(Affectation, 'IDT', '0'), Cycle, Solde, NumeroTicketLie, CodeLot, CodeMenu, BadgeSociete, BadgeTarif, BadgeRegion, BadgeNom, BadgeValidite, BadgeCaution, BadgeFidelite, BadgeJetons, Taux_TVA, PrixHT, PartSociete, PartSociete, NumCB, DateService, Service, UAIRne, Differe, NombrePoint, PointSubVar FROM LHisto_Temp, Vue_Lieux WHERE codeclient = '127438' and typeligne = 1 and Ligne = 1
Est ce que ça veux dire qu'un trigger sur insert ne fonctionne que pour les INSERT ligne par ligne ? ça ne fonctionne pas sur les INSERT... INTO ?
Est ce que c'est parce que j'appelle d'autres procédures stockées dans mon trigger ?
Merci
[edit]
En fait si je comprend bien mon trigger s'exécute après l'insert des 2000 lignes et pas ligne par ligne. Donc si jeux veux executer mon trigger ligne par ligne, il faut que je fasse un curseur sur la table inserted pour la passer ligne par ligne, c'est bien ça ?
Merci
Partager