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?

MattGrommes
fonte
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.

Dave
fonte
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
MattGrommes
fonte
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'
Jeff Meatball Yang
fonte
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';
earizon
fonte
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'
ka_lin
fonte
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.

Russ Cam
fonte
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]

Bryan
fonte
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.

Leslie Sage
fonte
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')
Mircea Grelus
fonte
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
Luv
fonte
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');
Aaron Bertrand
fonte
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

Matthew lowe
fonte