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 :

[SQL 2005] Curseurs imbriqués


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [SQL 2005] Curseurs imbriqués
    Bonjour,

    Config :
    Windows 2003 Server
    SQL Server 2005 SP2


    Je souhaite utiliser deux curseurs imbriqués. Le premier me retourne une liste de tables, puis le second traite un champ donné pour chacune de ces tables (de même structure). Mais lors de l'exécution, j'obtiens un message d'erreur indiquant que la variable @tbl n'est pas déclarée, alors qu'elle l'est...

    Quelqu'un aurait-il une idée ? Ou un autre moyen que les curseurs imbrqués ? J'ai vu qu'on pouvait utiliser une boucle WHILE à la place, mais malgré les exemples, je n'ai pas réussi à la faire fonctionner comme je voulais.

    Je ne cherche pas la performance, car c'est pour une tâche administrative ponctuelle.


    Code Transact-SQL : 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
    DECLARE @tata 	VARCHAR(255)
    DECLARE @tbl	VARCHAR(255) -- la fautive
     
     
    DECLARE cur_tables CURSOR FOR
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%pattern%'
     
    OPEN cur_tables
    	FETCH NEXT FROM cur_tables INTO @tbl
    	WHILE @@FETCH_STATUS = 0
    	BEGIN
    		DECLARE cur_toto CURSOR FOR
    		SELECT chp FROM @tbl WHERE chp LIKE '%titi%' -- <--- c'est ici
     
    		OPEN cur_toto
    			FETCH NEXT FROM cur_toto INTO @tata
    			WHILE @@FETCH_STATUS = 0
    			BEGIN
    				-- diverses actions
    			END
    		CLOSE cur_toto
    		DEALLOCATE cur_toto
    		FETCH NEXT FROM cur_tables INTO @tbl
    	END
    CLOSE cur_tables
    DEALLOCATE cur_tables

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Bonjour,

    personnellement quand je veux passer à une requete un nom de table ou de colonne provenant d'un paramètre, j'utilise plutot le moyen suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    EXEC('DECLARE cur_toto CURSOR FOR
    		SELECT chp FROM '+@tbl+' WHERE chp LIKE ''%titi%''')
    On ne peut pas considérer un paramètre varchar comme un nom de table. Ca serait comme dire "select * from 'matable' ".
    Je pense que le problème vient de là.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Mille mercis nox75, ça marche nickel comme ça, je n'y avais pas pensé...

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

Discussions similaires

  1. [SQL Server 2005] Curseur : ordre des instructions
    Par nox75 dans le forum MS SQL Server
    Réponses: 17
    Dernier message: 07/07/2009, 11h29
  2. Réponses: 8
    Dernier message: 31/10/2007, 13h15
  3. Connexion pages ASP avec server SQL 2005
    Par charabia dans le forum ASP
    Réponses: 10
    Dernier message: 10/02/2006, 14h02
  4. [SQL 2005] Stocker des fichiers
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/02/2006, 10h05
  5. [ADO.Net][C#/SQL 2005] Comment faire INSERT avec variable ?
    Par hduchemin dans le forum Accès aux données
    Réponses: 1
    Dernier message: 25/01/2006, 17h34

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