Erreurs avec mon curseur

Fermé
almaje Messages postés 14 Date d'inscription mercredi 12 octobre 2011 Statut Membre Dernière intervention 21 décembre 2016 - 21 déc. 2016 à 17:02
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 2 janv. 2017 à 15:44
Bonjour,
J'ai une table qui contient des enregistrements que je souhaite récupérer et insérer dans une 2e table selon une colonne "Index_count" de la premiere table, quand j'exécute mon code ça me donne des erreurs sur lesquelles je seche pour le moment :

Declare @code1 varchar(10),@code2 varchar(10), @lettre2 varchar(5), @lettre3 varchar(5), @lettre4 varchar(5);
SET @code2 = NULL;
SET @lettre2 = NULL;
SET @lettre3 = NULL;
SET @lettre4 = NULL;

DECLARE curseur1 CURSOR FOR 
SELECT top 1 Code from Configuration..ngap order by 'Code';

OPEN curseur1
Fetch next from curseur1 INTO @code1;
while @@FETCH_STATUS = 0
BEGIN
if @code1<>@code2
	insert into Configuration..ngap2 values ('@code1', select top 1 Description_acte from Configuration..ngap where Code='@code1' order by 'Code',  select top 1 Lettre from Configuration..ngap where Code='@code1' order by 'Code', select top 1 Coef from Configuration..ngap where Code='@code1' order by 'Code')
if @code1=@code2
	set @lettre2 = (select lettre2 from Configuration..ngap2 where Code='@code1');
	set @lettre3 = (select lettre3 from Configuration..ngap2 where Code='@code1');
	set @lettre4 = (select lettre4 from Configuration..ngap2 where Code='@code1');
	if @lettre2 is null
		update Configuration..ngap2 set lettre2 = (select Lettre from Configuration..ngap where Code='@code1' and index_count=2)
		update Configuration..ngap2 set Coef2 = (select Coef from Configuration..ngap where Code='@code1' and index_count=2)
	if @lettre3 is null
		update Configuration..ngap2 set lettre3 = (select Lettre from Configuration..ngap where Code='@code1' and index_count=3)
		update Configuration..ngap2 set Coef3 = (select Coef from Configuration..ngap where Code='@code1' and index_count=3)
	if @lettre4 is null
		update Configuration..ngap2 set lettre4 = (select Lettre from Configuration..ngap where Code='@code1' and index_count=4)
		update Configuration..ngap2 set Coef4 = (select Coef from Configuration..ngap where Code='@code1'and index_count=4)
@code2=@code1;
FETCH NEXT FROM curseur1 into @code1;
END  
  
CLOSE curseur1;  
DEALLOCATE curseur1;  
GO


et voici les erreurs :

Msg 156, Level 15, State 1, Line 15
Incorrect syntax near the keyword 'select'.
Msg 156, Level 15, State 1, Line 15
Incorrect syntax near the keyword 'select'.
Msg 156, Level 15, State 1, Line 15
Incorrect syntax near the keyword 'select'.
Msg 102, Level 15, State 1, Line 15
Incorrect syntax near ')'.
Msg 102, Level 15, State 1, Line 29
Incorrect syntax near '@code2'.


2 réponses

almaje Messages postés 14 Date d'inscription mercredi 12 octobre 2011 Statut Membre Dernière intervention 21 décembre 2016
21 déc. 2016 à 17:10
Dans la requête INSERT, j'ai des des guillemets dans les valeurs à insérer et je n'ai plus que 2 erreurs :

Msg 102, Level 15, State 1, Line 15
Incorrect syntax near '@code1'.
Msg 102, Level 15, State 1, Line 29
Incorrect syntax near '@code2'.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié par Reivax962 le 2/01/2017 à 15:45
Bonjour,

Je vois quelques soucis dans ton code.

1 - Tu devrais délimiter l'intérieur de tes blocs IF par des BEGIN...END. Tel que c'est écrit, le IF ne concerne à chaque fois que la première requête qui suit, et j'ai l'impression que ce n'est pas ce que tu recherches.

2 - @code2=@code1; -> Il manque un SET, comme ceci :
SET @code2=@code1;

3 - Dans ta requête d'initialisation du curseur, tu mets un TOP 1. Du coup ton curseur n'ira jamais voir plus loin que la première ligne ! Il faut l'enlever.

4 - Dans tous tes ORDER BY 'Code', 'Code' écrit comme ça représente une chaîne de caractère et non la colonne. Pour indiquer un nom de colonne, soit tu le laisses sans apostrophes
ORDER BY Code
soit entre crochets (notation propre à SQL Server)
ORDER BY [Code]

Je pense qu'avec toutes ces corrections, ça commencera à rouler :)

Xavier
0