IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Un curseur portant le nom 'curs5' existe déjà ?


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut Un curseur portant le nom 'curs5' existe déjà ?
    Salut,

    J'ai un problème sur une série de curseurs. Voici le code :

    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
     
    DECLARE curs CURSOR local fast_forward
    	FOR
    		select strTitre, datCreation, strAuteur, intStatut, strContenu, intIdUtilisateur, intStatutVisible, booAfficheresultat from t_ccl_cas where intIdCas = @intIdCas
    	OPEN curs
    	FETCH NEXT FROM curs INTO @strTitre, @datCreation, @strAuteur, @intStatut, @strContenu, @intIdUtilisateur, @intStatutVisible, @booAfficheresultat
    	WHILE @@fetch_status = 0
    	BEGIN
    			/* Création du cas */
    			INSERT INTO t_ccl_cas (strTitre, datCreation, strAuteur, intStatut, strContenu, intIdUtilisateur, intStatutVisible, booAfficheresultat) VALUES (@strTitre, @datCreation, @strAuteur, @intStatut, @strContenu, @intIdUtilisateur, @intStatutVisible, @booAfficheresultat)
                SET @intIdCasNouveau = @@IDENTITY
    			print 'cas créé, id=' + convert(varchar, @intIdCasNouveau)
     
    			/* Affectation des spécialités */
    			DECLARE curs2 CURSOR local fast_forward
    			FOR
    				select intIdSpecialite from t_ccl_cas_specialite where intIdCas = @intIdCas
    			OPEN curs2
    			FETCH NEXT FROM curs2 INTO @intIdSpecialite
    			WHILE @@fetch_status = 0
    			BEGIN
    					INSERT INTO t_ccl_cas_specialite (intIdCas, intIdSpecialite) VALUES (@intIdCasNouveau, @intIdSpecialite)
    					print 'spécialité affectée'
    					FETCH NEXT FROM curs2 INTO @intIdSpecialite
    			END
    			CLOSE curs2
     
    			/* Affectation des questions */
    			DECLARE curs3 CURSOR local fast_forward
    			FOR
    				select intIdQuestion, strIntitule, intNbReponses, intTypeQuestion, strExplication, booReponse, intOrdre, intIdUtilisateur, strIntroduction, booAffichePopup, booReponseMultiple from t_ccl_question where intIdCas = 192
    			OPEN curs3
    			FETCH NEXT FROM curs3 INTO @intIdQuestion, @strIntitule, @intNbReponses, @intTypeQuestion, @strExplication, @booReponse, @intOrdre, @intIdUtilisateur, @strIntroduction, @booAffichePopup, @booReponseMultiple
    			WHILE @@fetch_status = 0
    			BEGIN
    					INSERT INTO t_ccl_question (intIdCas, strIntitule, intNbReponses, intTypeQuestion, strExplication, booReponse, intOrdre, intIdUtilisateur, strIntroduction, booAffichePopup, booReponseMultiple) VALUES (@intIdCasNouveau, @strIntitule, @intNbReponses, @intTypeQuestion, @strExplication, @booReponse, @intOrdre, @intIdUtilisateur, @strIntroduction, @booAffichePopup, @booReponseMultiple)
    					SET @intIdQuestionNouveau = @@IDENTITY					
    					print 'question créée, id=' + convert(varchar, @intIdQuestionNouveau)
     
    					/* Affectation des réponses */
    					DECLARE curs5 CURSOR local fast_forward
    					FOR select strIntitule, booValide, intNumReponse from t_ccl_reponse where intIdQuestion = @intIdQuestion
    					OPEN curs5 
    					FETCH NEXT FROM curs5 INTO @strIntitule, @booValide, @intNumReponse
    					WHILE @@fetch_status = 0
    					BEGIN
    							INSERT INTO t_ccl_reponse (intIdQuestion, strIntitule, booValide, intNumReponse) VALUES (@intIdQuestionNouveau, @strIntitule, @booValide, @intNumReponse)
    							print 'réponse créée'
    							FETCH NEXT FROM curs5 INTO @strIntitule, @booValide, @intNumReponse
    					END
    					CLOSE curs5
     
    					FETCH NEXT FROM curs3 INTO @intIdQuestion, @strIntitule, @intNbReponses, @intTypeQuestion, @strExplication, @booReponse, @intOrdre, @intIdUtilisateur, @strIntroduction, @booAffichePopup, @booReponseMultiple
    			END
    			CLOSE curs3
     
                FETCH NEXT FROM curs INTO @strTitre, @datCreation, @strAuteur, @intStatut, @strContenu, @intIdUtilisateur, @intStatutVisible, @booAfficheresultat    
    	END
    	CLOSE curs
    J'ai un 1er curseur "curs" que je parcours. Dans ce parcours, je parcours un 2nd curseur "curs3", dans lequel je parcours un nouveau curseur "curs5".
    A l'exécution, j'ai le message Un curseur portant le nom*'curs5' existe déjà..

    Vu que je fais le DECLARE dans la boucle, ça me parait logique, mais je ne trouve pas comment déclarer ce curseur à l'init puis modifier la requête à la volée ...

  2. #2
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Ajouter les "deallocate cursor" après les "close" devrait règler le problème.
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    Nickel ! Ca marche. Merci bien, je ne connaissais pas cette instruction.

  4. #4
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Alors il faut que cela devienne un réflexe dès maintenant...ce sera salutaire pour ton serveur.
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Admin] MSR erreur un serveur portant ce nom existe déjà*
    Par lvandeginste dans le forum Administration-Migration
    Réponses: 2
    Dernier message: 29/12/2011, 16h56
  2. Réponses: 0
    Dernier message: 09/06/2008, 18h30
  3. Réponses: 1
    Dernier message: 01/02/2008, 18h21
  4. créer classeur Excel portant le nom d'une ComboBox
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/12/2006, 09h01
  5. [ORA-00955] ce nom d’objet existe déjà
    Par vrossi59 dans le forum Oracle
    Réponses: 2
    Dernier message: 14/02/2006, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo