¿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?


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.


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

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'

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

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'


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.


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]


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.


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

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


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');

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.