Bonjour,

j'ai un trigger sur insert dans sur une table lhisto.

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'ai 2000 Lignes dans ma table lhisto_temp

j'exécute la requete suivante :

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
Mon trigger ne se déclenche pas ou plutôt, il se déclenche seulement pour la dernière ligne insérée...

si je fais

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
qui ne renvoie qu'une seule ligne, alors il s'execute.

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