¿Cómo enumero todas las columnas en una tabla?

231

Para los diversos sistemas de bases de datos populares, ¿cómo enumera todas las columnas de una tabla?

MattGrommes
fuente
44
Debería haber una insignia para escribir una pregunta que se cierra, pero recibe más de 100 votos a favor :) OTOH, no es sorprendente que no haya una respuesta aceptada, ya que pregunta sobre varias bases de datos, por lo que no estoy en desacuerdo con la decisión de cerrar . Me alegra que la sesión de preguntas y respuestas esté aquí.
ToolmakerSteve

Respuestas:

255

Para MySQL, use:

DESCRIBE name_of_table;

Esto también funciona para Oracle siempre que esté utilizando SQL * Plus o el Desarrollador SQL de Oracle.

Dave
fuente
16
Esta solución es para MYSQL no MSSQL
Hammad Khan
2
@dmvianna No creo que eso se aplique necesariamente a todo Oracle, sino a SQL * Plus.
Tripp Kinetics
Debe ser DESCRIBE name_of_table '';
beahacker
para sqlite: use: pragma table_info (table_name), es decir, sqlite> pragma table_info (column1);
GyRo
Edición, ya DESCRIBEque no es una instrucción Oracle PLSQL sino un comando SQL * Plus , y como tal no funciona en la mayoría de los IDE de SQL.
walen
117

Para Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Para MySQL

SHOW COLUMNS FROM table_name
MattGrommes
fuente
44
Probablemente desee ordenar la consulta de Oracle por column_id
David Aldridge
66
Para Oracle es válido también DESCRIBE name_of_table.
Pigueiras
use <database_name>; mostrar columnas en <table_name> como '<column_prefix>%'; Le permitirá enumerar solo las columnas que comienzan con el prefijo especificado. Omitiendo los corchetes angulares, por supuesto.
rstackhouse
¿Qué hay user_tab_colsen tu consulta?
Jogi
@Jogi - Google "oracle user_tab_cols" - está integrado en Oracle db.
ToolmakerSteve
103

Para MS SQL Server:

select * from information_schema.columns where table_name = 'tableName'
Jeff Meatball Yang
fuente
99
La columna de interés aquí sería COLUMN_NAME.
Buggieboy
44
Esto debería funcionar en muchos DBMS. information_schema.columnsLa vista del sistema es parte del ANSI SQLestándar ( enlace ).
Bogdan Sahlean
44
buena respuesta, pero para evitar duplicados usaría:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah
Esto es compatible con SQL-92 ANSI, y debería funcionar en todos los motores de bases de datos.
Gareth Davidson
39

(5 años después, para Honor de PostgreSQL, el DDBB más avanzado del Reino)

En PostgreSQL:

\d table_name

O, usando SQL:

select column_name, data_type, character_maximum_length
    from INFORMATION_SCHEMA.COLUMNS 
    where table_name = 'table_name';
Earizon
fuente
44
debe ser \ d nombre_tabla. \ dt nombre_tabla enumera las relaciones.
l85m
36

Sé que es tarde, pero uso este comando para Oracle:

select column_name,data_type,data_length from all_tab_columns where TABLE_NAME = 'xxxx' AND OWNER ='xxxxxxxxxx'
ka_lin
fuente
Intenté esto en Oracle y no funcionó. Se imprimió el column_name pero nada más. Tuve que usar SELECT CAST (COLUMN_NAME AS CHAR (40)) || '' || DATA_TYPE para obtener un formato agradable y obtener múltiples columnas con concatenación.
Eamonn Kenny el
27

servidor 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'

o

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

La segunda forma es un estándar ANSI y, por lo tanto, debería funcionar en todas las bases de datos compatibles con ANSI.

Russ Cam
fuente
Ninguno de estos funciona como está escrito (o al menos implícito, como lo leí) para MS SQL Server. En ambos casos, la columna del nombre de la tabla almacena el nombre sin ninguno [ ]alrededor, por lo que la consulta no debe usarlos, solo el nombre de la tabla sin formato. Si esa no era la intención del OP, al menos tenga en cuenta esto.
JonBrave
1
@JonBrave - eso es correcto, los corchetes estaban allí para implicar "inserta el nombre de tu tabla aquí" :)
Russ Cam
Siendo corchetes, lo leí como " inserta el nombre de tu tabla entre corchetes (debido a una palabra potencialmente reservada) aquí ", y luego no obtuve coincidencias :) Quizás BNF <Table Name>habría evitado la ambigüedad. De todos modos, me di cuenta de que podría haber tenido la intención de que, al escribir el comentario, no perjudique advertir a los demás por si acaso.
JonBrave
1
Solo funciona para MSSQL si no hay '[]' y las comillas '' son necesarias alrededor del nombre de la tabla.
XValidado el
14

Servidor MS SQL:

sp_columns [nombre de tabla]

Bryan
fuente
12

Microsoft SQL Server Management Studio 2008 R2:

En un editor de consultas, si resalta el texto del nombre de la tabla (ex dbo.MyTable) y presiona ALT+ F1, obtendrá una lista de nombres de columna, tipo, longitud, etc.

ALT+ F1mientras ha resaltado dbo.MyTablees el equivalente a ejecutar de EXEC sp_help 'dbo.MyTable' acuerdo con este sitio

No puedo hacer que funcionen las variaciones de las consultas INFORMATION_SCHEMA.COLUMNS, por lo que utilizo esto en su lugar.

Leslie Sage
fuente
1
No funcionó en SSMS 2012. Por cierto, ¿te refieres a SQL Server Management Studio 2008?
Hammad Khan
1
Sí, más precisamente me refería a Microsoft SQL Server Management Studio 2008 R2. Lo editaré
Leslie Sage
4

servidor SQL

Para enumerar todas las tablas definidas por el usuario de una base de datos:

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

Para enumerar todas las columnas de una tabla:

use [databasename]
select name from syscolumns where id=object_id('tablename')
Mircea Grelus
fuente
Je Esto es simplemente incorrecto ... solo puede usar USE para bases de datos ... Y la consulta devuelve todas las tablas definidas por el usuario en la base de datos, que no es lo que quería el OP.
Maximilian Mayerl
4

Para SQL Server

sp_help tablename
Luv
fuente
3

Solo una ligera corrección en los demás en SQL Server (¡el prefijo de esquema se está volviendo más importante!):

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

Ejemplo:

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

Solo mi codigo

Matthew lowe
fuente