Comment répertorier toutes les colonnes d'un tableau?


231

Pour les différents systèmes de base de données populaires, comment répertoriez-vous toutes les colonnes d'une table?


4
Il devrait y avoir un badge pour écrire une question qui se ferme, mais reçoit plus de 100 votes positifs :) OTOH, ce n'est pas surprenant qu'il n'y ait pas de réponse acceptée, car il pose des questions sur plusieurs bases de données, donc je ne suis pas en désaccord avec la décision de fermer . Content que le Q&R soit là.
ToolmakerSteve

Réponses:


255

Pour MySQL, utilisez:

DESCRIBE name_of_table;

Cela fonctionne également pour Oracle tant que vous utilisez SQL * Plus ou Oracle Developer SQL.


16
Cette solution est pour MYSQL pas MSSQL
Hammad Khan

2
@dmvianna Je ne pense pas que cela s'applique nécessairement à tout Oracle, mais à SQL * Plus.
Tripp Kinetics du

Ce devrait être DESCRIBE name_of_table``;
beahacker

pour sqlite - utilisez: pragma table_info (nom_table), c'est-à-dire sqlite> pragma table_info (colonne1);
GyRo

L'édition, puisqu'il DESCRIBEne s'agit pas d'une instruction Oracle PLSQL mais d' une commande SQL * Plus , et en tant que telle, elle ne fonctionne pas dans la plupart des IDE SQL.
walen

117

Pour Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Pour MySQL

SHOW COLUMNS FROM table_name

4
Vous voudriez probablement commander la requête Oracle par column_id
David Aldridge

6
Pour Oracle est également valable DESCRIBE name_of_table.
Pigueiras

use <database_name>; afficher les colonnes dans <table_name> comme '<column_prefix>%'; Vous permettra de répertorier uniquement les colonnes commençant par le préfixe spécifié. Omettre les équerres bien sûr.
rstackhouse

quelle est user_tab_colsvotre requête?
Jogi

@Jogi - Google "oracle user_tab_cols" - son intégré à Oracle db.
ToolmakerSteve

103

Pour MS SQL Server:

select * from information_schema.columns where table_name = 'tableName'

9
La colonne qui nous intéresse ici serait COLUMN_NAME.
Buggieboy

4
Cela devrait fonctionner sur de nombreux SGBD. information_schema.columnsla vue du système fait partie de la ANSI SQLnorme ( lien ).
Bogdan Sahlean

4
bonne réponse mais pour éviter les doublons, j'utiliserais:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah

Ceci est conforme à la norme ANSI SQL-92 et devrait fonctionner dans tous les moteurs de base de données.
Gareth Davidson

39

(5 ans plus tard, pour l'honneur de PostgreSQL, le DDBB le plus avancé du Royaume)

Dans PostgreSQL:

\d table_name

Ou, en utilisant SQL:

select column_name, data_type, character_maximum_length
    from INFORMATION_SCHEMA.COLUMNS 
    where table_name = 'table_name';

4
doit être \ d nom_table. \ dt nom_table répertorie les relations.
l85m

36

Je sais qu'il est tard mais j'utilise cette commande pour Oracle:

select column_name,data_type,data_length from all_tab_columns where TABLE_NAME = 'xxxx' AND OWNER ='xxxxxxxxxx'


J'ai essayé cela dans Oracle et cela n'a pas fonctionné. Le nom_colonne a été imprimé mais rien d'autre. J'ai dû utiliser SELECT CAST (COLUMN_NAME AS CHAR (40)) || '' || DATA_TYPE pour obtenir un bon format et obtenir plusieurs colonnes avec concaténation.
Eamonn Kenny

27

serveur SQL

SELECT 
    c.name 
FROM
    sys.objects o
INNER JOIN
    sys.columns c
ON
    c.object_id = o.object_id
AND o.name = 'Table_Name'

ou

SELECT 
    COLUMN_NAME 
FROM 
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_NAME  = 'Table_Name'

La deuxième méthode est une norme ANSI et devrait donc fonctionner sur toutes les bases de données conformes à ANSI.


Aucun de ces travaux n'est écrit (ou du moins implicite, comme je l'ai lu) pour MS SQL Server. Dans les deux cas, la colonne de nom de table stocke le nom sans aucun [ ]autour de lui, de sorte que la requête ne doit pas les utiliser, uniquement le nom de table simple. Si ce n'était pas l'intention du PO, sachez-le au moins.
JonBrave

1
@JonBrave - c'est exact, les crochets étaient là pour impliquer "insérer votre nom de table ici" :)
Russ Cam

Étant des crochets, je l'ai lu comme " insérez le nom de votre table entre crochets (à cause d'un mot potentiellement réservé) ici ", puis je <Table Name>n'ai obtenu aucune correspondance :) Peut-être que BNF aurait évité l'ambiguïté. Quoi qu'il en soit, je me suis rendu compte que vous aviez peut-être voulu cela lorsque j'ai écrit le commentaire --- cela ne fait aucun mal d'avertir les autres au cas où.
JonBrave

1
Fonctionne uniquement pour MSSQL s'il n'y a pas de «[]» et que les guillemets «» sont nécessaires autour du nom de la table.
XValidé le


12

Microsoft SQL Server Management Studio 2008 R2:

Dans un éditeur de requête, si vous mettez en surbrillance le texte du nom de la table (ex dbo.MyTable) et appuyez sur ALT+F1 , vous obtiendrez une liste de noms de colonnes, type, longueur, etc.

ALT+ F1alors que vous avez mis en évidence dbo.MyTableest l'équivalent de courirEXEC sp_help 'dbo.MyTable' selon ce site

Je ne parviens pas à faire fonctionner les variantes d'interrogation de INFORMATION_SCHEMA.COLUMNS, je l'utilise donc à la place.


1
Ne fonctionnait pas dans SSMS 2012. Btw vouliez-vous dire SQL Server Management Studio 2008?
Hammad Khan

1
Oui, plus précisément, je voulais dire Microsoft SQL Server Management Studio 2008 R2. Je vais éditer.
Leslie Sage

4

serveur SQL

Pour répertorier toutes les tables définies par l'utilisateur d'une base de données:

use [databasename]
select name from sysobjects where type = 'u'

Pour répertorier toutes les colonnes d'un tableau:

use [databasename]
select name from syscolumns where id=object_id('tablename')

Il h? C'est juste faux ... vous ne pouvez utiliser USE que pour les bases de données ... Et la requête renvoie toutes les tables définies par l'utilisateur dans la base de données, ce qui n'est pas ce que l'OP voulait.
Maximilian Mayerl


3

Juste une légère correction sur les autres dans SQL Server (le préfixe de schéma devient plus important!):

SELECT name
  FROM sys.columns 
  WHERE [object_id] = OBJECT_ID('dbo.tablename');

3

Exemple:

select Table_name as [Table] , column_name as [Column] , Table_catalog as [Database], table_schema as [Schema]  from information_schema.columns
where table_schema = 'dbo'
order by Table_name,COLUMN_NAME

Juste mon code

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.