Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/01/2012, 11h57   #1
Membre habitué
 
Inscription : octobre 2008
Messages : 27
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : octobre 2008
Messages : 27
Points : 131
Points : 131
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 :
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.
e.haefele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 13h28   #2
Futur Membre du Club
 
Homme Sid Ahmed TOUBAL
Ingénieur développement logiciels
Inscription : juillet 2010
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Sid Ahmed TOUBAL
Localisation : Algérie

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

Informations forums :
Inscription : juillet 2010
Messages : 47
Points : 17
Points : 17
Envoyer un message via MSN à s.toubal Envoyer un message via Skype™ à s.toubal
je c pas si ca vas rependre a ton probleme :
Code :
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 )
s.toubal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 13h52   #3
Membre Expert
 
Avatar de Tober
 
Homme Thomas
Ingénieur développement logiciels
Inscription : juillet 2007
Messages : 741
Détails du profil
Informations personnelles :
Nom : Homme Thomas
Âge : 27
Localisation : Luxembourg

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

Informations forums :
Inscription : juillet 2007
Messages : 741
Points : 1 000
Points : 1 000
Ca serait pas :
Tober est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 15h12   #4
Membre habitué
 
Inscription : octobre 2008
Messages : 27
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : octobre 2008
Messages : 27
Points : 131
Points : 131
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.
e.haefele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 15h15   #5
Membre habitué
 
Inscription : octobre 2008
Messages : 27
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : octobre 2008
Messages : 27
Points : 131
Points : 131
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 ?
e.haefele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 17h00   #6
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
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
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 17h15   #7
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 17h26   #8
Membre habitué
 
Inscription : octobre 2008
Messages : 27
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : octobre 2008
Messages : 27
Points : 131
Points : 131
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 :
sp_helpindex 'nom_table'
Peut-être que ma démarche est complètement loufoque et là aussi finalement votre avis m'intéresse.
e.haefele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 18h39   #9
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
écris donc une requête avec les vues suivantes :
sys.all_columns, INFORMATION_SCHEMA.COLUMNS et sys.indexes
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 19h17   #10
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h52   #11
Membre habitué
 
Inscription : octobre 2008
Messages : 27
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : octobre 2008
Messages : 27
Points : 131
Points : 131
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 ...
e.haefele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h13   #12
Membre éclairé
 
Avatar de hariman
 
Homme Luc Hariman RANDRIANOMENJANAHARY
Développeur Java
Inscription : janvier 2008
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Luc Hariman RANDRIANOMENJANAHARY
Localisation : Ile Maurice

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

Informations forums :
Inscription : janvier 2008
Messages : 175
Points : 349
Points : 349
Envoyer un message via MSN à hariman Envoyer un message via Skype™ à hariman
Bonjour,

La vue sys.index_columns pourrait bien t'aider !
__________________
Les boutons et adorent être cliqués, donc ne les oubliez pas
hariman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h02.


 
 
 
 
Partenaires

Hébergement Web