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 :

Description des colonnes d'une table


Sujet :

MS SQL Server

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut Description des colonnes d'une table
    Bonjour à tous,

    Je souhaiterais récupérer les informations suivantes pour une table de ma base de donnée :

    Le nom de la colonne
    Le type de la colonne (datetime, varchar ...)
    La taille maximum de la colonne
    Le type de clé (primaire ou non)
    Le type d'index (unique ou non, sans)

    Avec MySql je fais un simple :

    Avec Sqlserver j'ai trouvé la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM information_schema.columns WHERE table_name = 'nom_table'
    Malheureusement cette requête ne me précise pas le type de clé et d'index.

    Je remercie par avance celui ou celle qui pourra me dépanner.

    Précision : je réalise mes tests avec SqlServer 2005.

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    je c pas si ca vas rependre a ton probleme :
    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
    SELECT TOP 0 * INTO ##Table_Temporaire FROM  
    (
           --la requête à exécuter ici
           SELECT * FROM Ma_Table
    ) 
    AS T 
     
     
    SELECT 
    ( 
    SELECT COLUMN_NAME,DATA_TYPE --, autre champ,...
    FROM tempdb.INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = '##Table_Temporaire'  
    FOR XML RAW
    ) AS Retultat_xml
     
     
    DROP TABLE ##Table_Temporaire
    si c'est la cas alors on peut dire que la solution a ta questions est ma question (voir ici )

  3. #3
    Membre expérimenté Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Points : 1 381
    Points
    1 381
    Par défaut
    Ca serait pas :

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut
    Bonjour,

    Citation Envoyé par s.toubal Voir le message
    je c pas si ca vas rependre a ton probleme :
    Cette requête (associé au fichier INFORMATION_SCHEMA.COLUMNS) ne donne aucune indication sur les clés et les types d'index. Merci quand même.

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut
    Bonjour,

    Citation Envoyé par Tober Voir le message
    Ca serait pas :
    Je ne souhaiterais pas passer par une procédure stockée, n'est-il pas envisageable de l'obtenir par autre moyen ?

  6. #6
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par e.haefele Voir le message
    Bonjour,
    Je ne souhaiterais pas passer par une procédure stockée, n'est-il pas envisageable de l'obtenir par autre moyen ?
    Qu'est ce qui te gène dans l'utilisation d'une procédure stockée ? Qu'est ce que tu veux faire exactement de ces infos ? c'est quoi le but ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 769
    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 769
    Points : 52 722
    Points
    52 722
    Billets dans le blog
    5
    Par défaut
    DESCRIBE n'existe pas en SQL. C'est une merdouille de MySQL. A l'époque MySQL n'était pas capable de faire des procédures stockées, donc ils ont inventé des commandes pseudo SQL pour faire la même chose qu'une proc stock.

    MS SQL Server ayant depuis 20 ans les procédures stockées, fournit de multiples procédures pour décrire en long en large et en travers les objets d'une base....

    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/ * * * * *

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut
    Bonjour,

    Citation Envoyé par zinzineti Voir le message
    Qu'est ce qui te gène dans l'utilisation d'une procédure stockée ? Qu'est ce que tu veux faire exactement de ces infos ? c'est quoi le but ?
    Le but est d'opérer automatiquement une modification de la structure de table en m'appuyant sur une description personnelle de la structure de cette table. Exemple : ma description indique que telle colonne à un index unique, j'aimerais (par programmation) vérifier si en production cette rubrique est déjà indexée ou non et le cas échéant ajouter l'index manquant sur la colonne.

    Pourquoi je ne veux pas utiliser une procédure stockée, parce que je n'arrive pas à l'exploiter par programmation. Je dois avouer que je suis assez novice mais lorsque j'exécute ma requête, je ne récupère qu'une ligne avec les colonnes name, owner, type et created_datetime mais pas le reste. De plus comment puis-je faire de façon certaine la différence entre une clé primaire, un index unique et un index avec doublons ? Si on m'apporte la réponse à cette question, la procédure stockée suivante pourrait sans doute convenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sp_helpindex 'nom_table'
    Peut-être que ma démarche est complètement loufoque et là aussi finalement votre avis m'intéresse.

  9. #9
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    écris donc une requête avec les vues suivantes :
    sys.all_columns, INFORMATION_SCHEMA.COLUMNS et sys.indexes
    Etienne ZINZINDOHOUE
    Billets-Articles

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 769
    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 769
    Points : 52 722
    Points
    52 722
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par e.haefele Voir le message
    Bonjour,

    Le but est d'opérer automatiquement une modification de la structure de table en m'appuyant sur une description personnelle de la structure de cette table. Exemple : ma description indique que telle colonne à un index unique, j'aimerais (par programmation) vérifier si en production cette rubrique est déjà indexée ou non et le cas échéant ajouter l'index manquant sur la colonne.

    ...

    Peut-être que ma démarche est complètement loufoque et là aussi finalement votre avis m'intéresse.
    Un peu loufoque... Vous auriez dû commencer par le commencement en nous disant ce que vous voulez faire... Nous aurions pu vous orienter.

    C'est c'est pour "tracer" les modifications de structure (index compris) entre une base et l'autre, il existe au moins 5 moyens différents de l'automatiser
    - réplication transactionnelle
    - trigger DDL
    - Change Tracking
    - CDC.
    - tableDiff
    ...

    Donc, formulez votre demande de manière fonctionnelle et on vous donnera la solution la plus adaptée.

    Donnez aussi quelques exemples.

    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/ * * * * *

  11. #11
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    écris donc une requête avec les vues suivantes :
    sys.all_columns, INFORMATION_SCHEMA.COLUMNS et sys.indexes
    La table sys.indexes est très intéressante puisqu'elle permet de lister tous les index et de savoir si c'est une clé primaire, un index unique ou non. Par contre, aucun des trois tables citées ne me permet de relier le nom de la colonne au nom de l'index. J'ai cherché mais je ne trouve aucune table qui me permet d'établir ce lien.

    Je te remercie pour ton aide car j'y suis presque, il ne me manque plus que ce lien entre le nom de la colonne et le nom de l'index. Si tu as une idée je suis preneur ...

  12. #12
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    Bonjour,

    La vue sys.index_columns pourrait bien t'aider !
    Les boutons et adorent être cliqués, donc ne les oubliez pas

Discussions similaires

  1. [VB6 - Access]Récupérer description des champs d'une table
    Par New dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/11/2014, 14h53
  2. Réponses: 1
    Dernier message: 22/12/2005, 09h03
  3. [D-7][PostGres]Récuperer l'ensemble des colonnes d'une table
    Par Escandil dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/10/2005, 09h17
  4. [JDBC]Nom des colonnes d'une table
    Par Guybrush dans le forum JDBC
    Réponses: 6
    Dernier message: 08/09/2004, 18h28
  5. [Firebird 1.5] nom des colonnes d'une table
    Par c0rwyn dans le forum SQL
    Réponses: 4
    Dernier message: 03/09/2004, 14h44

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