Come elenco tutte le colonne in una tabella?


231

Per i vari sistemi di database popolari, come si elencano tutte le colonne in una tabella?


4
Dovrebbe esserci un badge per scrivere una domanda che viene chiusa, ma riceve oltre 100 voti :) OTOH, non è sorprendente che non ci sia una risposta accettata, dal momento che chiede più database, quindi non sono in disaccordo con la decisione di chiudere . Sono contento che il Q&A sia qui.
ToolmakerSteve

Risposte:


255

Per MySQL, utilizzare:

DESCRIBE name_of_table;

Questo funziona anche per Oracle finché si utilizza SQL * Plus o Oracle Developer SQL.


16
Questa soluzione è per MYSQL e non per MSSQL
Hammad Khan,

2
@dmvianna Non penso che si applichi necessariamente a tutto Oracle, ma a SQL * Plus.
Tripp Kinetics,

Dovrebbe essere DESCRIBE name_of_table``;
Beahacker,

per sqlite - utilizzare: pragma table_info (nome_tabella) ovvero sqlite> pragma table_info (colonna1);
GyRo,

Modifica, poiché DESCRIBEnon è un'istruzione Oracle PLSQL ma un comando SQL * Plus e come tale non funziona nella maggior parte degli IDE SQL.
walen,

117

Per Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Per MySQL

SHOW COLUMNS FROM table_name

4
Probabilmente vorrai ordinare la query Oracle per column_id
David Aldridge,

6
Per Oracle è valido anche DESCRIBE name_of_table.
Pigueiras,

usa <database_name>; mostra le colonne in <nome_tabella> come '<colonna_prefisso>%'; Ti consentirà di elencare solo le colonne che iniziano con il prefisso specificato. Omettendo ovviamente le parentesi angolari.
rstackhouse,

qual è la user_tab_colstua domanda?
Jogi,

@Jogi - Google "oracle user_tab_cols" - è integrato in Oracle db.
ToolmakerSteve

103

Per MS SQL Server:

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

9
La colonna di interesse qui sarebbe COLUMN_NAME.
Buggieboy

4
Questo dovrebbe funzionare su molti DBMS. information_schema.columnsla vista di sistema fa parte dello ANSI SQLstandard ( collegamento ).
Bogdan Sahlean,

4
buona risposta ma per evitare duplicati select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
userei

Questo è conforme ANSI SQL-92 e dovrebbe funzionare in tutti i motori di database.
Gareth Davidson,

39

(5 anni laters, per l'onore di PostgreSQL, il DDBB più avanzato del Regno)

In PostgreSQL:

\d table_name

Oppure, usando SQL:

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

4
dovrebbe essere \ d nome_tabella. \ dt table_name elenca le relazioni.
l85m,

36

So che è tardi ma uso questo comando per Oracle:

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


L'ho provato in Oracle e non ha funzionato. Il nome_colonna è stato stampato ma nient'altro. Ho dovuto usare SELECT CAST (COLUMN_NAME AS CHAR (40)) || '' || DATA_TYPE per ottenere un formato piacevole e ottenere più colonne con concatenazione.
Eamonn Kenny,

27

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

Il secondo modo è uno standard ANSI e quindi dovrebbe funzionare su tutti i database conformi ANSI.


Nessuno di questi funziona come scritto (o almeno implicito, come ho letto) per MS SQL Server. In entrambi i casi la colonna del nome della tabella memorizza il nome senza alcuno [ ]intorno ad esso, quindi la query non deve usarli, solo il nome della tabella normale. Se questa non era l'intenzione del PO, almeno esserne consapevole.
JonBrave,

1
@JonBrave - esatto, le parentesi quadre erano lì per implicare "inserisci qui il nome del tuo tavolo" :)
Russ Cam

Essendo parentesi quadre, l'ho letto come " inserisci qui il tuo nome di tabella tra parentesi quadre (a causa della parola potenzialmente riservata) ", e quindi non ho trovato corrispondenze :) Forse BNF <Table Name>avrebbe evitato l'ambiguità. Comunque, mi sono reso conto che avresti potuto intendere che mentre scrivevo il commento --- non fa male avvertire gli altri nel caso.
JonBrave,

1
Funziona con MSSQL solo se non è presente '[]' e le virgolette '' sono necessarie attorno al nome della tabella.
XV convalidato il


12

Microsoft SQL Server Management Studio 2008 R2:

In un editor di query, se si evidenzia il testo del nome della tabella (ex dbo.MyTable) e si preme ALT+ F1, verrà visualizzato un elenco di nomi di colonna, tipo, lunghezza, ecc.

ALT+ F1mentre hai evidenziato dbo.MyTableè l'equivalente di correre EXEC sp_help 'dbo.MyTable' secondo questo sito

Non riesco a far funzionare le variazioni sulla query di INFORMATION_SCHEMA.COLUMNS, quindi lo uso invece.


1
Non ha funzionato in SSMS 2012. A proposito, intendevi SQL Server Management Studio 2008?
Hammad Khan,

1
Sì, più precisamente intendevo Microsoft SQL Server Management Studio 2008 R2. Lo modificherò.
Leslie Sage,

4

server SQL

Per elencare tutte le tabelle definite dall'utente di un database:

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

Per elencare tutte le colonne di una tabella:

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

Eh? Questo è solo sbagliato ... puoi usare USE solo per i database ... E la query restituisce tutte le tabelle definite dall'utente nel database, che non è ciò che l'OP voleva.
Maximilian Mayerl,

4

Per SQL Server

sp_help tablename

3

Solo una leggera correzione sugli altri in SQL Server (il prefisso dello schema sta diventando più importante!):

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

3

Esempio:

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 il mio codice

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.