Como faço para listar todas as colunas em uma tabela?


231

Para os vários sistemas populares de banco de dados, como você lista todas as colunas em uma tabela?


4
Deve haver um distintivo para escrever uma pergunta que é fechada, mas recebe mais de 100 votos :) OTOH, não é de surpreender que não haja uma resposta aceita, pois ela pergunta sobre vários bancos de dados, por isso não discordo da decisão de fechar . Que bom que as perguntas e respostas estão aqui.
Home

Respostas:


255

Para o MySQL, use:

DESCRIBE name_of_table;

Isso também funciona para o Oracle, desde que você esteja usando o SQL * Plus ou o SQL Developer da Oracle.


16
Esta solução é para o MySQL não MSSQL
Hammad Khan

2
@dmvianna Eu não acho que isso se aplique necessariamente a todo o Oracle, mas ao SQL * Plus.
Tripp Kinetics

Deve ser DESCRIBE name_of_table``;
precisa saber é o seguinte

para sqlite - use: pragma table_info (table_name) ou seja, sqlite> pragma table_info (column1);
Gyro

Edição, pois DESCRIBEnão é uma instrução Oracle PLSQL, mas um comando SQL * Plus e, como tal, não funciona na maioria dos IDEs 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

4
Youd provavelmente quer pedir a consulta Oracle column_id
David Aldridge

6
Para Oracle também é válido DESCRIBE name_of_table.
Pigueiras 29/10

use <nome do banco de dados>; mostre colunas em <nome_tabela> como '<prefixo_coluna>%'; Permite listar apenas as colunas que começam com o prefixo especificado. Omitindo os colchetes angulares, é claro.
rstackhouse

o que está user_tab_colsem sua consulta?
Jogi

@Jogi - Google "oracle user_tab_cols" - é incorporado ao Oracle db.
Home

103

Para MS SQL Server:

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

9
A coluna de interesse aqui seria COLUMN_NAME.
Buggieboy

4
Isso deve funcionar em muitos DBMSs. information_schema.columnsa visualização do sistema faz parte do ANSI SQLpadrão ( link ).
Bogdan Sahlean

4
boa resposta, mas para evitar duplicatas eu usaria:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah

Isso é compatível com SQL-92 ANSI e deve funcionar em todos os mecanismos de banco de dados.
Gareth Davidson

39

(5 anos depois, para a Honra do PostgreSQL, o DDBB mais avançado do Reino)

No PostgreSQL:

\d table_name

Ou, usando SQL:

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

4
deve ser \ d nome_tabela. \ dt nome_tabela lista as relações.
l85m 9/09/15

36

Eu sei que é tarde, mas eu uso este comando para Oracle:

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


Eu tentei isso no Oracle e não funcionou. O nome da coluna foi impresso, mas nada mais. Eu tive que usar SELECT CAST (COLUMN_NAME AS CHAR (40)) || '' || DATA_TYPE para obter um bom formato e obter várias colunas com concatenação.
Eamonn Kenny

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'

ou

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

A segunda maneira é um padrão ANSI e, portanto, deve funcionar em todos os bancos de dados compatíveis com ANSI.


Nenhum desses trabalhos está escrito (ou pelo menos está implícito, como eu o li) para o MS SQL Server. Nos dois casos, a coluna de nome da tabela armazena o nome sem nenhum [ ]contorno, portanto a consulta não deve usá-los, apenas o nome da tabela simples. Se essa não era a intenção do OP, pelo menos esteja ciente disso.
21416 JonBrave

1
@ JonBrave - isso é correto, os colchetes estavam lá para implicar "insira o nome da sua tabela aqui" :) :)
Russ Cam

Sendo colchetes, eu li como " insira o nome da sua tabela entre colchetes (por causa de uma palavra potencialmente reservada) aqui " e não obteve correspondências :) Talvez o BNF <Table Name>evitasse a ambiguidade. Enfim, eu percebi que você poderia ter pretendido que, enquanto escrevi o comentário - não faz mal avisar os outros por precaução.
21716 JonBrave

1
Funciona apenas para MSSQL se não houver '[]' e as aspas '' forem necessárias em torno do nome da tabela.
validado

14

MS SQL Server:

sp_columns [nome da tabela]


12

Microsoft SQL Server Management Studio 2008 R2:

Em um editor de consultas, se você destacar o texto do nome da tabela (por exemplo, dbo.MyTable) e pressionar ALT+ F1, receberá uma lista de nomes de colunas, tipo, comprimento, etc.

ALT+ F1enquanto você destacou dbo.MyTableé o equivalente à execução de EXEC sp_help 'dbo.MyTable' acordo com este site

Não consigo obter as variações na consulta de BUSINESS_SCHEMA.COLUMNS, então uso isso.


1
Não funcionou no SSMS 2012. Btw você quis dizer SQL Server Management Studio 2008?
21813 Hammad Khan

1
Sim, mais precisamente, eu quis dizer Microsoft SQL Server Management Studio 2008 R2. Eu vou editar.
precisa saber é o seguinte

4

servidor SQL

Para listar todas as tabelas definidas pelo usuário de um banco de dados:

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

Para listar todas as colunas de uma tabela:

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

Heh? Isso está errado ... você só pode usar USE para bancos de dados ... E a consulta retorna todas as tabelas definidas pelo usuário no banco de dados, o que não é o que o OP queria.
Maximilian Mayerl

4

Para SQL Server

sp_help tablename

3

Apenas uma pequena correção nos outros no SQL Server (o prefixo do esquema está se tornando mais importante!):

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

3

Exemplo:

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

Apenas meu código

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.