Bonjour,

Je galère depuis ce matin pour creer une procedure stockée mais je n'arrive pas à trouver l'erreur l'analyseur de requete me renvoi le message suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
Serveur : Msg 170, Niveau  15, État 1, Procédure sp_gen_relever, Ligne 67
Ligne 67 : syntaxe incorrecte vers '@VolumePrelever'.
Serveur : Msg 170, Niveau  15, État 1, Procédure sp_gen_relever, Ligne 69
Ligne 69 : syntaxe incorrecte vers '@VolumePrelever'.
Serveur : Msg 156, Niveau  15, État 1, Procédure sp_gen_relever, Ligne 150
Syntaxe incorrecte vers le mot clé 'END'.
Pourtant la variable @VolumePrelever semble correcte et les structure
BEGIN et END egalement.

Voici le code de la PS :
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
 
 
CREATE PROCEDURE [dbo].sp_gen_relever
(
@Gerer int
)
AS
 
DECLARE @CodeUsager varchar(10)
DECLARE @CodeForage varchar(10)
DECLARE @VolumeAnnuelPrelever Float
DECLARE @VolumePrelever Float
DECLARE @PrevIndex Float
DECLARE @Coeff Float
DECLARE @UnitPrice Money
DECLARE @PresenceCompteur INTEGER
DECLARE @EtatCompteur INTEGER
DECLARE @Id_Trimestre INTEGER
DECLARE @TypeReleve char(1)
DECLARE @ModeCalcul char(1)
DECLARE @NumCompteur varchar(20)
DECLARE @CodeTypeUsager varchar(5)
DECLARE @ID INTEGER
DECLARE @TableName varchar(50)
DECLARE @Result INTEGER
DECLARE @NombreForage INTEGER
 
 
 
SELECT @Id_Trimestre=id_trimestre  FROM table_periode_rel  where current_trim=1
 
 
BEGIN TRAN
 
SELECT
  dbo.table_usager.code_usager,
  dbo.table_usager.volume_prel_forf,
  dbo.table_type_usager.pu_ht,
  dbo.table_usager.code_type_usager
FROM
  dbo.table_usager
  INNER JOIN dbo.table_type_usager ON (dbo.table_usager.code_type_usager = dbo.table_type_usager
  AND  table_usager.usager_inactif=@Gerer)
 
 
OPEN curUsager
 FETCH NEXT FROM curUsager INTO @CodeUsager,@VolumeAnnuelPrelever,@UnitPrice,
@CodeTypeUsager
WHILE @@FETCH_STATUS=0 --PARCOUR DE LA TABLE USAGER ET SELECT TABLE FORRAGE PAR USAGER
BEGIN --1
 --DEBUT DU WHILE FORAGE
  DECLARE curForage CURSOR FOR
  SELECT
  COUNT(code_forage) AS nombreForage,table_forage.code_forage,
  table_forage.num_compteur,
  table_forage.presence_compteur from table_forage
  WHERE (table_forage.code_usager=@CodeUsager)
  GROUP BY code_forage,num_compteur,presence_compteur
  Open curForage
  FETCH NEXT FROM curForage INTO @nombreForage,@CodeForage,@NumCompteur,@PresenceCompteur
  WHILE @@FETCH_STATUS=0
  BEGIN --2
   IF @NumCompteur=''
    BEGIN --3
    @VolumePrelever = (@VolumeAnnuelPrelever / @nombreForage)/4
     IF @@CURSOR_ROWS=1
       @VolumePrelever = (@VolumeAnnuelPrelever/4)
    END
 
      SELECT @EtatCompteur=C.compteur_activer,@PrevIndex=C.dernier_index,@Coeff=C.coefficient,
      @ModeCalcul=C.mode_calcul FROM table_compteur C WHERE C.num_compteur=@NumCompteur
      IF @EtatCompteur=1
        --si c'est un releve depuis le compteur type C et sans VolumePrelever (0)
       BEGIN --4
       SET @TypeReleve='I'
       SET @VolumePrelever=0
       END
      ELSE
       BEGIN --5
       --si absence de compteur c'est un releve forfaitaire AVEC tYPE F
       SET @TypeReleve='F'
       SET @VolumePrelever = @VolumePrelever
       END
 
   EXEC @ID=dbo.sp_sys_key @TableName = 'table_releve'
 
   INSERT INTO dbo.table_releve
     (
      Id,
      code_usager,
      num_compteur,   -- TABLE FORAGE
	  prev_index,     --TABLE COMPTEUR
	  nouvel_index,
	  volume_prelev, --TABLE USAGER
	  type_prelev,
	  date_releve,
	  pu_ht,         -- TABLE TYPE_USAGER
	  code_type_usager,
      id_fact,
      num_fact,
	  coefficient,   --COMPTEUR
	  calculer,
	  facturer,
   	  id_trimestre,
      mode_calcul
     )
 
     VALUES
 
    (
     @Id,
     @CodeUsager,
     @NumCompteur,
     @PrevIndex,
     0,
     @VolumePrelever,
     @TypeReleve,
     null,
     @UnitPrice,
     @CodeTypeUsager,
     null,
     null,
     @Coeff,
     0,
     0,
     @Id_Trimestre,
     @ModeCalcul
     )
 
 
     IF (@@error!=0)
     BEGIN
        RAISERROR  20000 'SERVEUR : Traitement impossible pour l''usager '
        ROLLBACK TRAN
        RETURN(@@error)
     END
 
    FETCH NEXT FROM curForage INTO @nombreForage,@CodeForage,
  @NumCompteur,@PresenceCompteur
 END --2  ---FIN DU WHILE FORAGE
 
CLOSE curForage
DEALLOCATE curForage
 
 
FETCH NEXT FROM curUsager INTO @CodeForage,@CodeUsager,@numcompteur,@PresenceCompteur,
@CodeTypeUsager,@VolumePrelever,@UnitPrice
END -- WHILE @@FETCH_STATUS=0 (1)
 
CLOSE curUsager
DEALLOCATE curUsager
COMMIT TRAN
Je vous remercie de m'aider à trouver l'erreur je galère vraiment.