Bonjour,
en fait le titre dis tout et je suis sur que la réponse est basique, mais ne trouvant pas sur le net, je pose la question...
Y a-t-il une requete SQL qui permet, a partir du nom d'une table, de retourner ses clef?
merci d'avance...
Bonjour,
en fait le titre dis tout et je suis sur que la réponse est basique, mais ne trouvant pas sur le net, je pose la question...
Y a-t-il une requete SQL qui permet, a partir du nom d'une table, de retourner ses clef?
merci d'avance...
La réponse est oui ...
L'information est présente dans le catalogue du SGBD qui contient des informations sur la structure et les contraintes des bases applicatives.
On parle alors de métadonnées.
Le catalogue est lui-même sous forme de tables.
Le problème est que chaque SGBD possède sa propre définition du catalogue, avec même des variantes selon les systèmes d'exploitation et les versions.
Votre question s'applique à quel SGBD et à quel OS ?
Il existe aussi une solution normée, mais pas disponible avec tous les moteurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT column_name FROM Information_Schema.Table_Constraints c INNER JOIN Information_Schema.Key_Column_Usage k ON k.Table_Name = c.Table_Name AND k.constraint_name = c.constraint_name WHERE c.Table_Name = 'TA_TABLE' AND Constraint_Type = 'PRIMARY KEY' ORDER BY k.Ordinal_Position
Alors voila, j'ai un peu modifié la requette, mais lors que je met ca:
il me sort:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT column_name FROM Information_Schema.Table_Constraints c INNER JOIN Information_Schema.Key_Column_Usage k ON k.Table_Name= c.Table_Name AND k.constraint_name = c.constraint_name WHERE c.Table_Name = 'species' ORDER BY k.Ordinal_Position
Alors que j'attend :
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 speciesid speciesid organism organism classification classification speciesid speciesid organism organism classification classification
Pour la réponse précédente, je tourne sous linux mandriva 2006, mais comment connaitre l'autre information?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 speciesid organism classification
Normal tu as oublié "AND Constraint_Type = 'PRIMARY KEY' " donc tu obtiens une ligne dans la vue Table_Constraints pour chacune des contraintes sur la table et non pour la PK seule...
Dans le principe, je suis d'accord avec toi, mais dans ce cas, il me retourne :
...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 speciesid speciesid speciesid speciesid
Est-ce que tu as la même table dans plusieurs schémas ? Si oui, ajoute les contraintes de schéma dans la jointure et dans le where.
Si tu as un doute, poste ici le résultat de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM Information_Schema.Table_Constraints WHERE Table_Name = 'species'
C'est normal, par définition, une table n'a qu'une clé primaire ...
effectivement... c'est pour ca que j'avais enlevé la ligne de contrainte, mais je peux faire comment pour récuperer toute les clef alors? j'ai tenté avec DISTINCT ou un group by, mais ca n'a pas l'air de marcher...
C'est quoi pour vous une "clé" ?Envoyé par mauroyb0
En dehors de la clé primaire bien sûr ...
... pour moi ce sont les différents nom des colonnes... effectivement, je me suis mal exprimé...
Alors je vais reformuler... Comment est ce que je peux connaitre l'intitulé de chacune des collones f'une table dont je connais le nom?
Il n'y a pas de bonne réponse à une mauvaise question !
Si au lieu de reformuler tu avais cherché un peu dans le schéma INFORMATION_SCHEMA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TA_TABLE'
La réponse est nickel, merci beaucoup... Pour la peine, j'ai été étudier a fond la table INFORMATION_SCHEMA.COLUMNS parce que je crois effectivement que j'aurais pu trouver ca tout seul...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager