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 :

Récupération de données des tables listés dans un autre table...


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut Récupération de données des tables listés dans un autre table...
    Bonjour!!!

    J'ai un petit soucis...
    J'ai une base de données Sql server contenant une table Toto(Id_Toto, Toto, Nom_Table)
    qui contient presque toutes la liste des autre tables de la base de données.

    Je voudrai créer une requête de ce genre :
    Select * from (Select Nom_Table from Domaine)

    c'est à dire je voudrai récupérer des champs des tables listés dans la table Toto.

    Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    ca sert pas à grand chose de faire une table qui contient le nom des autres tables, les tables système font ca pour toi, voici une requete qui va te donner tous les champs d'une table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select distinct syscolumns.name from syscolumns, sysobjects
    where sysobjects.name = 'nom de ta table' and sysobjects.id = 
    syscolumns.id

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Oui j'ai sais que comme ca ça semble bizard mais je suis obligé de procéder de cette methode... car cette table ne contient toutes les tables mais seulement quelques une qui ont une particularité...

    D'autre part, je tenis à préciser que je ne veux pas récupérer les champs des tables mais bien les données des tables qui sont listés dans la table Toto...

    Merci d'avance.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut Récupération de données et non pas de champs...
    Oui j'ai sais que comme ca ça semble bizard mais je suis obligé de procéder de cette methode... car cette table ne contient pas toutes les tables mais seulement quelques une qui ont une particularité...

    D'autre part, je tiens à préciser que je ne veux pas récupérer les champs des tables mais bien les données des tables qui sont listés dans la table Toto...

    Merci d'avance.

  5. #5
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    hé bé tu peux faire un curseur pour avoir la liste de toutes tes tables et faire un select pour chaque table :

    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
     
    DECLARE @nom varchar(50)
     
    DECLARE Test3 CURSOR FOR
    SELECT DISTINCT Nom_Table FROM Toto
    OPEN Test3
    FETCH NEXT FROM test3 INTO
    @nom 
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
    SELECT * FROM @nom
     
    FETCH NEXT FROM test3 INTO
    @nom 
    END
    Close test3
    DEALLOCATE test3
    execute ca via le query analyzer, il devrai te mettre la liste de tes données pour chaque table

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Tout d'abord je tiens à te remercier pour tes réponses.

    J'ai exécuté le code que tu m'as passé mais il me revoit une erreur qui le suivant :

    Server: Msg 137, Level 15, State 2, Line 13
    Must declare the variable '@nom'.
    Saurai tu pourquoi???
    Jusqu'ici je n'ai jamais utilisé de curseurs...

    Merci encore d'avance.

  7. #7
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    tu as oublié cette ligne là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DECLARE @nom varchar(50)
    à mettre après le 'AS'

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Non je ne l'ai pas oublié...

    Cepandant tu dis que je dois le mettre après AS :
    Cela veut dire qu'il faut que je mets quelque chose avant, or moi je n'ai executé que le code que tu m'as donné.

    Pourrai tu me dire ce que je dois mettre avant???

    Merci

  9. #9
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    désolé j'ai oublié un détails, tu peux copier coller ce code dans le query analyser, j'ai essayé chez moi ca fonctionne :

    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
     
    DECLARE @nom varchar(50)
    DECLARE @QUERY varchar(500)
     
    DECLARE Test3 CURSOR FOR
    SELECT DISTINCT name FROM toto
    OPEN Test3
    FETCH NEXT FROM test3 INTO
    @nom 
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
    SET @QUERY = 'SELECT * FROM ' + @nom
    EXEC(@QUERY)
    FETCH NEXT FROM test3 INTO
    @nom 
    END
    Close test3
    DEALLOCATE test3
    PS : si tu as beaucoup de table et pas mal de données dedans, ca peut etre long

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Merci!!!

    Avec quelques petites modifications, ça fonctionne...

    Mais, j'aurai encore une petite question.

    Est ce que je peux déclarer ce curseur en procédure stockée???
    Si oui comment???
    J'ai essayé de cette manière mais ça ne fonctionne pas...

    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
     
    CREATE PROCEDURE ps_s_Curseur
    as
     
    DECLARE @nom varchar(50)
    DECLARE @QUERY varchar(500)
     
    DECLARE Test2 CURSOR FOR
    SELECT DISTINCT Nom_Table FROM Domaine
    OPEN Test2
    FETCH NEXT FROM Test2 INTO
    @nom 
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
    SET @QUERY = 'SELECT * FROM ' + @nom
    EXEC(@QUERY)
    FETCH NEXT FROM Test2 INTO
    @nom 
    END
    Close Test2
    DEALLOCATE Test2

  11. #11
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    pour créer une procedure va dans sql entreprise manager, tu fais un clic droit sur prod stock (pas loin en dessous de table) et tu fais nouvelle prod stock, tu lui donne un nom et tu colle le code que je t'ai donné.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Merci ça fonctionne!

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut [Résolu]
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/07/2012, 15h53
  2. Réponses: 2
    Dernier message: 02/06/2010, 12h55
  3. Importer données d'une colonne dans une autre table
    Par Monkey_D.Luffy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/06/2008, 17h08
  4. Récupérer les données d'une liste dans une autre liste
    Par benoit knk dans le forum SharePoint
    Réponses: 2
    Dernier message: 23/05/2008, 17h10
  5. Réponses: 2
    Dernier message: 05/06/2006, 15h24

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