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.
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'
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';
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
INNERJOIN
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.
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.
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.
Respuestas:
Para MySQL, use:
Esto también funciona para Oracle siempre que esté utilizando SQL * Plus o el Desarrollador SQL de Oracle.
fuente
DESCRIBE
name_of_table '';DESCRIBE
que 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.Para Oracle (PL / SQL)
Para MySQL
fuente
DESCRIBE name_of_table
.user_tab_cols
en tu consulta?Para MS SQL Server:
fuente
information_schema.columns
La vista del sistema es parte delANSI SQL
estándar ( enlace ).select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
(5 años después, para Honor de PostgreSQL, el DDBB más avanzado del Reino)
En PostgreSQL:
O, usando SQL:
fuente
Sé que es tarde, pero uso este comando para Oracle:
fuente
servidor SQL
o
La segunda forma es un estándar ANSI y, por lo tanto, debería funcionar en todas las bases de datos compatibles con ANSI.
fuente
[
]
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.<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.Servidor MS SQL:
sp_columns [nombre de tabla]
fuente
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.MyTable
es el equivalente a ejecutar deEXEC sp_help 'dbo.MyTable'
acuerdo con este sitioNo puedo hacer que funcionen las variaciones de las consultas INFORMATION_SCHEMA.COLUMNS, por lo que utilizo esto en su lugar.
fuente
servidor SQL
Para enumerar todas las tablas definidas por el usuario de una base de datos:
Para enumerar todas las columnas de una tabla:
fuente
Para SQL Server
fuente
Solo una ligera corrección en los demás en SQL Server (¡el prefijo de esquema se está volviendo más importante!):
fuente
Ejemplo:
Solo mi codigo
fuente