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 Server 2000] renvoie des éléments présent dans une boucle for en sql


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut renvoie des éléments présent dans une boucle for en sql
    Bonjour à tous

    J'ai créé la procédure stockée suivante (qui marche très bien).

    Faite de cette manière elle renvoie plusieurs datatable (autant de datatable qu'il y a de tour de boucle) .
    Il y a t-il un d'avoir les même informations ms renvoyées dans un seul datatable ?

    Voilà le code sql :

    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
    CREATE procedure dbo.spS_Dictionary2Item
    (
    	@ID_Item		varchar(255)
    )
    DECLARE @ID_Language int
    DECLARE @ID bigint
     
    DECLARE myCursor CURSOR LOCAL
     
     
    FOR
     
    	SELECT Languages.ID FROM Languages
     
    OPEN myCursor
     
    FETCH NEXT FROM myCursor INTO @ID_Language
     
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
    SET @ID = ( SELECT Dictionary2.ID FROM Dictionary2 WHERE Dictionary2.ID_Item = @ID_Item AND Dictionary2.ID_Language = @ID_Language)
     
    	IF(@ID > 0)
    	BEGIN 
    		SELECT 
     
    			'ID_Item' = @ID_Item
    			,'ID_Language' = @ID_Language
    			,'Text' = case when Dictionary2.Text is not null then Dictionary2.Text else '' end
     
    		FROM
     
    			Dictionary2
     
    		WHERE
     
    			Dictionary2.ID_Item = @ID_Item
    			AND Dictionary2.ID_Language = @ID_Language
    	END

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    tu peux par exemple, au lieu d'exécuter un select à chaque tour de boucle, construire une chaine de caractère que tu concatènes à chaque tour.

    Entre chaque tu mets le mot "union"


    et après la boucle tu fais un exec de ta chaine de caractères.


    Je ne l'ai jamais fait, mais on est pas à l'abris que ça fonctionne

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par josy972
    Il y a t-il un d'avoir les même informations ms renvoyées dans un seul datatable ?
    Désolé mais je ne comprends pas votre question non seulement parce qu'il manque des mots mais aussi parce que vous écrivez en langage SMS et que l'on vous demande de ne pas le faire.

    Enfin, pensez à indiquer votre SGBD (SQL Server ?) et sa version.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Autant pour moi ;
    Il y a t-il un moyen d'avoir les même informations mais renvoyées dans un seul datatable ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Le mieux serait d'effectuer qu'une seule requête en utilisant des sous-requêtes ou des requêtes imbriquées.

    Cordialement,
    Nicolas L.
    Bon courage pour la suite.

  6. #6
    Rédacteur


    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 844
    Points : 52 941
    Points
    52 941
    Billets dans le blog
    5
    Par défaut
    Vous n'avez pas besoin de curseur pour une telle requête (d'ailleurs sémantiquement incompréhensible et syntaxiquement fausse). Une seule requête suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       SELECT 'ID_Item' = @ID_Item
    	,'ID_Language' = @ID_Language
    	,'Text' = case when Dictionary2.Text IS NOT NULL then Dictionary2.Text else '' end
       FROM	 Dictionary2
       WHERE Dictionary2.ID_Item = @ID_Item
         AND Dictionary2.ID_Language = @ID_Language
         AND CASE 
                WHEN (SELECT Dictionary2.ID 
                      FROM   Dictionary2 
                      WHERE  Dictionary2.ID_Item = @ID_Item 
                        AND  Dictionary2.ID_Language = @ID_Language) > 0 THEN 1
                ELSE 0
             END = 1
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Charger des fichiers .mat dans une boucle for
    Par chouicha dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/02/2014, 01h05
  2. Réponses: 9
    Dernier message: 16/04/2013, 12h01
  3. [SQL Server 2000] Recherche d'un ID dans toute la BD
    Par Invité dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 02/04/2007, 14h48
  4. Réponses: 9
    Dernier message: 20/03/2007, 19h56
  5. [SQL-SERVER 2000] Remplacer l'instruction GO dans requete
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 14h24

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