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

Langage SQL Discussion :

"boucle" sur les tables (débutant)


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut "boucle" sur les tables (débutant)
    Bonjour,

    Je dispose d'une base de donnees sous sql server express 2005.
    Je souhaiterais "boucler" sur toutes les tables de cette base afin d'en extraire la structure individuelle.
    Je m'explique :
    je dois pouvoir extraire la structure de toutes les tables de cette base (sauf deux bien précises).
    Premiere commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [name]
    FROM MABASE.[dbo].[sysobjects]
    WHERE xtype='U' and [name] not in ('table1','tables2')
    Ensuite, je voudrais pouvoir boucler sur toutes les modalités de "name" et faire

    pour chaque modalité de "name", faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME="name"
    boucler
    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740
    Par défaut
    De manière générale, on ne fait pas de boucles imbriquées en bases de données, mais au contraire une seule requête qui renvoit l'ensemble des résultats.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [name], COLUMN_NAME
    FROM MABASE.[dbo].[sysobjects] AS so
      INNER JOIN INFORMATION_SCHEMA.COLUMNS AS c ON so.name = c.TABLE_NAME
    WHERE xtype='U' AND [name] NOT IN ('table1','tables2')

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Antoun Voir le message
    De manière générale, on ne fait pas de boucles imbriquées en bases de données, mais au contraire une seule requête qui renvoit l'ensemble des résultats.
    Je voudrais me faire l'avocat du diable sur cette affirmation.
    S'il est vrai qu'il est souvent meilleur d'utiliser les jointures, il faut aussi analyser la performance de ces jointures. Il m'est arrivé assez souvent de boucler sur une base par programme car cela se révélait beaucoup plus perfomant que la requête.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740
    Par défaut
    Sans doute les colonnes jointes n'étaient pas indexées...

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Exactement !
    You take the point !

    Mais le dev n'a pas toujours (pas souvent) la main sur la structure de table.
    Et c'est pourquoi je pense qu'il est bon de préciser que les jointures DOIVENT être évaluées en termes de performances avant de rejeter complètement les boucles par programme.

    Voilà.

  6. #6
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Sauf exception (mauvaise conception, mauvais index) une requête ensembliste est toujours préférable à l'utilisation de curseurs et de boucles.

    Le DBA est censé être disponible pour ajouter les index nécessaires et le développeur doit savoir aller se faire conseiller par son DBA ou lui demander des index.

    En effet les moteurs de bases de données relationnelles sont orientés ensemblistes et non itératifs.

    En tout cas, même s'il y a des exceptions, il faut d'abord avoir fait le tour des possibilités ensemblistes avant de botter en touche en itératif. En ce qui me concerne la majorité des programmes déjà développés que je découvre en itératifs sont bien plus lent que ceux en ensembliste, et le fait de les convertir en ensembliste avec les index idoines change très notablement les perfs.

  7. #7
    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
    j'avoue que ça m'arrive de faire des boucles plutôt que des jointures, quand je bosse de très gros volumes et que je fais péter le log systématiquement

Discussions similaires

  1. question de débutant sur les tables
    Par baba4444 dans le forum Modélisation
    Réponses: 2
    Dernier message: 05/06/2009, 10h00
  2. [MYSQL] Commentaires sur les tables et les champs
    Par luc2verga dans le forum Requêtes
    Réponses: 10
    Dernier message: 30/05/2007, 00h49
  3. verrous sur les tables
    Par rv66 dans le forum Paradox
    Réponses: 2
    Dernier message: 04/09/2005, 21h15

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