Bonjour j'ai créé un trigger qui lors de la modification d'un champ d'une ligne créé une nouvelle ligne.
Seulement je lui dit de me faire qu'une insertion mais il m'en fait deux.
Voila mon trigger:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TRIGGER PassageBF ON [dbo].[F_DOCLIGNE] 
FOR  UPDATE
AS
DECLARE @PasseBF NUMERIC(13), @Qte NUMERIC(13),@Type SMALLINT,@Piece VARCHAR(9) ,@DL_No INTEGER,@QteAvant NUMERIC(13),@Test INTEGER,@sens SMALLINT,@DO_Piece VARCHAR(9),@NbLigne INTEGER,
@CHAR_DO_Piece_bis	CHAR(1),
@CHAR_DO_Piece CHAR(1),-- Caractère pour ajout au n° de pièce
@CHAR_DO_Piece4 CHAR(1),
@CHAR_DO_Piece3 CHAR(1),
@CHAR_DO_Piece2 CHAR(1),
@CHAR_DO_Piece1 CHAR(1),@cbMarq INTEGER
SELECT @Type=DO_Type,@PasseBF=PassageBF,@Qte=DL_Qte,@Piece=DO_Piece,@DL_No=DL_No,@sens=DL_MvtStock FROM Inserted
SELECT @QteAvant=DL_Qte FROM Deleted
 
 
 
Set @Test=0
IF @Type=25
BEGIN
	IF @sens=0
	BEGIN		
		UPDATE F_DOCLIGNE SET DL_Qte=(DL_Qte*@Qte)/@QteAvant  FROM F_DOCLIGNE WHERE DO_Piece=@Piece AND 
DL_MvtStock=3
		Set @NbLigne=@@rowcount
 
		--Calculer Nouveau DO_Piece
		IF @Piece=NULL 
		BEGIN
			Raiserror('Le No_Pièce est NULL',16,1)
		END
		IF LEN(@Piece)>=10 
		BEGIN
			Raiserror('Le numéro de pièce ne peut être incrémenté',16,1)
		END
 
		SELECT @CHAR_DO_Piece_bis = RIGHT(LEFT(MAX(DO_Piece),8),1)--Récupere le chiffre qui va falloir incrementer
		FROM F_DOCENTETE 
		WHERE DO_Type=25
 
		SELECT @CHAR_DO_Piece = LEFT(RIGHT(MAX(DO_Piece),2),1)--Récupere le chiffre qui va falloir incrementer
		FROM F_DOCENTETE 
		WHERE DO_Type=25
 
		SELECT @CHAR_DO_Piece1 = LEFT(RIGHT(MAX(DO_Piece),3),1) --Récupere le nombre à rajouter en cas de test 1
		FROM F_DOCENTETE 
		WHERE DO_Type=25
 
		SELECT @CHAR_DO_Piece2 = LEFT(RIGHT(MAX(DO_Piece),4),1) --Récupere le nombre à rajouter en cas de test 1
		FROM F_DOCENTETE 
		WHERE DO_Type=25
 
		SELECT @CHAR_DO_Piece3 = LEFT(RIGHT(MAX(DO_Piece),5),1) --Récupere le nombre à rajouter en cas de test 1
		FROM F_DOCENTETE 
		WHERE DO_Type=25
 
		SELECT @CHAR_DO_Piece4 =LEFT(RIGHT(MAX(DO_Piece),6),1) --Récupere le nombre à rajouter en cas de test 1
		FROM F_DOCENTETE 
		WHERE DO_Type=25 
 
		-- Pour Info 'A' = 65 ; 'Z' = 90 ; 'a' = 97 ; 'z' = 122
		-- Recherche de la lettre suivante
		IF @CHAR_DO_Piece_bis IS NULL
		BEGIN
			SET @CHAR_DO_Piece_bis = '0' -- si pas de lettre initialise à 0
		END
		ELSE
		BEGIN
		-- incrémente la lettre
			IF (ASCII(@CHAR_DO_Piece_bis) >= 47
				AND ASCII(@CHAR_DO_Piece_bis) < 57) -- Verifie qu'une lettre existe*/
			BEGIN
				SET @CHAR_DO_Piece_bis = CHAR(ASCII(@CHAR_DO_Piece_bis) + 1)
			END
			ELSE		
			BEGIN
	 		-- incrémente la lettre
				IF (ASCII(@CHAR_DO_Piece) >= 47 AND ASCII(@CHAR_DO_Piece) < 57) -- Verifie qu'une lettre existe*/
				BEGIN
					SET @CHAR_DO_Piece = CHAR(ASCII(@CHAR_DO_Piece) + 1)
					SET @CHAR_DO_Piece_bis = '0'
				END
				ELSE
				BEGIN
				IF (ASCII(@CHAR_DO_Piece1) >= 47 AND ASCII(@CHAR_DO_Piece1) < 57) -- Verifie qu'une lettre existe*/
				BEGIN
					SET @CHAR_DO_Piece1 = CHAR(ASCII(@CHAR_DO_Piece1) + 1)
					SET @CHAR_DO_Piece = '0'
					SET @CHAR_DO_Piece_bis = '0'
				END
				ELSE 
				BEGIN
					IF (ASCII(@CHAR_DO_Piece2) >= 47 AND ASCII(@CHAR_DO_Piece2) < 57)
					BEGIN
						SET @CHAR_DO_Piece2 = CHAR(ASCII(@CHAR_DO_Piece2) + 1)
						SET @CHAR_DO_Piece1 = '0'
						SET @CHAR_DO_Piece = '0'
						SET @CHAR_DO_Piece_bis = '0'
					END
					ELSE
					BEGIN
						IF (ASCII(@CHAR_DO_Piece3) >= 47 AND ASCII(@CHAR_DO_Piece3) < 57)
						BEGIN
							SET @CHAR_DO_Piece3 = CHAR(ASCII(@CHAR_DO_Piece3) + 1)
							SET @CHAR_DO_Piece2 = '0'
							SET @CHAR_DO_Piece1 = '0'
							SET @CHAR_DO_Piece = '0'
							SET @CHAR_DO_Piece_bis = '0'
						END
 
						BEGIN -- toutes les lettres ont été utilisées
								RAISERROR ('Impossible de Numéroter cette pièce1',16,1)
						END
					END
				END
			END
		END
	END 	
	SET @DO_Piece ='OF'+ @CHAR_DO_Piece3 + @CHAR_DO_Piece2+@CHAR_DO_Piece1 + @CHAR_DO_Piece +@CHAR_DO_Piece_bis	--@DO_PieceOrigine+@CHAR_DO_Piece 
	IF @DO_Piece IS NULL
	BEGIN
		RAISERROR('Le do_Piece est null',16,1)
	END 
	-- Valeur de cbMarq
	SELECT @cbMarq = MAX([cbMarq]+1)
	FROM [F_DOCENTETE]
 
--Insertion ENTETE
	INSERT INTO [F_DOCENTETE] 
  	([DO_Domaine],[DO_Type],[DO_Piece],[DO_Date],[DO_Ref],[DO_Tiers],
	[RE_No],[cbRE_No],[DO_Period],[DO_Devise],[DO_Cours],[DE_No],
	[cbDE_No],[LI_No],[cbLI_No],[CT_NumPayeur],[DO_Expedit],
	[DO_NbFacture],	[DO_BLFact],[DO_TxEscompte],[DO_Reliquat],[DO_Imprim],
	[CA_Num],[DO_Coord01],[DO_Coord02],[DO_Coord03],[DO_Coord04],
	[DO_Souche],[DO_DateLivr],[DO_Condition],[DO_Tarif],[DO_Colisage],
	[DO_TypeColis],	[DO_Transaction],[DO_Langue],[DO_Ecart],[DO_Regime],
	[N_CatCompta],[DO_Ventile],[AB_No],[DO_DebutAbo],[DO_FinAbo],
	[DO_DebutPeriod],[DO_FinPeriod],[CG_Num],[DO_Statut],[DO_Heure],
	[CA_No],[cbCA_No],[RE_NoCaissier],[cbRE_NoCaissier],[DO_Transfere],
	[DO_Cloture],[DO_NoWeb],[DO_Attente],[DO_Provenance],[cbProt],
	/*[cbMarq],*/[cbCreateur],[cbModification],[cbReplication],[cbFlag])
	SELECT 
	[DO_Domaine],[DO_Type],	@DO_Piece,[DO_Date],[DO_Ref],[DO_Tiers],
	[RE_No],[cbRE_No],[DO_Period],[DO_Devise],[DO_Cours],[DE_No],
	[cbDE_No],[LI_No],[cbLI_No],[CT_NumPayeur],[DO_Expedit],
	[DO_NbFacture],[DO_BLFact],[DO_TxEscompte],[DO_Reliquat],
	[DO_Imprim],[CA_Num],[DO_Coord01],[DO_Coord02],[DO_Coord03],
	[DO_Coord04],[DO_Souche],[DO_DateLivr],[DO_Condition],[DO_Tarif],
	[DO_Colisage],[DO_TypeColis],	[DO_Transaction],[DO_Langue],
	[DO_Ecart],[DO_Regime],[N_CatCompta],[DO_Ventile],[AB_No],
	[DO_DebutAbo],[DO_FinAbo],[DO_DebutPeriod],[DO_FinPeriod],[CG_Num],
	[DO_Statut],[DO_Heure],[CA_No],[cbCA_No],[RE_NoCaissier],
	[cbRE_NoCaissier],[DO_Transfere],[DO_Cloture],[DO_NoWeb],[DO_Attente],
	[DO_Provenance],[cbProt],/*@cbMarq,*/[cbCreateur],[cbModification],
	[cbReplication],[cbFlag]
	FROM [F_DOCENTETE]
	WHERE [DO_Piece] = @Piece
 
--Insertion Ligne avec boucle tant que	
	END
END
Merci