Wie liste ich alle Spalten in einer Tabelle auf?

231

Wie listen Sie für die verschiedenen gängigen Datenbanksysteme alle Spalten in einer Tabelle auf?

MattGrommes
quelle
4
Es sollte ein Abzeichen für das Schreiben einer Frage geben, die geschlossen wird, aber über 100 positive Stimmen erhält :) OTOH, es ist nicht überraschend, dass es keine akzeptierte Antwort gibt, da nach mehreren Datenbanken gefragt wird, sodass ich der Entscheidung zum Schließen nicht widerspreche . Ich bin nur froh, dass das Q & A hier ist.
ToolmakerSteve

Antworten:

254

Verwenden Sie für MySQL:

DESCRIBE name_of_table;

Dies funktioniert auch für Oracle, solange Sie SQL * Plus oder den SQL Developer von Oracle verwenden.

Dave
quelle
16
Diese Lösung ist für MYSQL nicht MSSQL
Hammad Khan
2
@dmvianna Ich denke nicht, dass dies unbedingt für Oracle gilt, sondern für SQL * Plus.
Tripp Kinetics
Es sollte DESCRIBE name_of_table`` sein;
Buhacker
für sqlite - verwenden Sie: pragma table_info (table_name) dh sqlite> pragma table_info (column1);
GyRo
Bearbeiten, da DESCRIBEes sich nicht um eine Oracle PLSQL-Anweisung, sondern um einen SQL * Plus-Befehl handelt und daher in den meisten SQL-IDEs nicht funktioniert.
Wal
117

Für Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Für MySQL

SHOW COLUMNS FROM table_name
MattGrommes
quelle
4
Sie möchten wahrscheinlich die Oracle-Abfrage von column_id
David Aldridge
6
Für Oracle gilt auch DESCRIBE name_of_table.
Pigueiras
benutze <Datenbankname>; Spalten in <Tabellenname> wie '<Spaltenpräfix>%' anzeigen; Hier können Sie nur die Spalten auflisten, die mit dem angegebenen Präfix beginnen. Die spitzen Klammern natürlich weglassen.
Stapelhaus
Was ist user_tab_colsin Ihrer Anfrage?
Jogi
@Jogi - Google "oracle user_tab_cols" - in Oracle db integriert.
ToolmakerSteve
103

Für MS SQL Server:

select * from information_schema.columns where table_name = 'tableName'
Jeff Fleischbällchen Yang
quelle
8
Die hier interessierende Spalte wäre COLUMN_NAME.
Buggieboy
4
Dies sollte auf vielen DBMS funktionieren. information_schema.columnsDie Systemansicht ist Teil des ANSI SQLStandards ( Link ).
Bogdan Sahlean
3
Gute Antwort, aber um Duplikate zu vermeiden, würde ich verwenden:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
Billynoah
Dies ist SQL-92 ANSI-kompatibel und sollte in allen Datenbankmodulen funktionieren.
Gareth Davidson
39

(5 Jahre später, zu Ehren von PostgreSQL, der fortschrittlichsten DDBB des Königreichs)

In PostgreSQL:

\d table_name

Oder mit SQL:

select column_name, data_type, character_maximum_length
    from INFORMATION_SCHEMA.COLUMNS 
    where table_name = 'table_name';
earizon
quelle
4
sollte \ d Tabellenname sein. \ dt tabellenname listet die Beziehungen auf.
185 m
36

Ich weiß, dass es spät ist, aber ich verwende diesen Befehl für Oracle:

select column_name,data_type,data_length from all_tab_columns where TABLE_NAME = 'xxxx' AND OWNER ='xxxxxxxxxx'
ka_lin
quelle
Ich habe es in Oracle versucht und es hat nicht funktioniert. Der Spaltenname wurde gedruckt, aber sonst nichts. Ich musste SELECT CAST (COLUMN_NAME AS CHAR (40)) || verwenden '' || DATA_TYPE, um ein schönes Format zu erhalten und mehrere Spalten mit Verkettung zu erhalten.
Eamonn Kenny
27

SQL Server

SELECT 
    c.name 
FROM
    sys.objects o
INNER JOIN
    sys.columns c
ON
    c.object_id = o.object_id
AND o.name = 'Table_Name'

oder

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

Der zweite Weg ist ein ANSI-Standard und sollte daher auf allen ANSI-kompatiblen Datenbanken funktionieren .

Russ Cam
quelle
Keines davon funktioniert für MS SQL Server wie geschrieben (oder zumindest impliziert, wie ich es lese). In beiden Fällen werden die Tabellenname Spalte speichert den Namen ohne jede [ ]drum herum, so dass die Abfrage nicht benutzen müssen, nur die einfache Tabellennamen. Wenn dies nicht die Absicht des OP war, sollten Sie sich dessen zumindest bewusst sein.
JonBrave
1
@ JonBrave - das ist richtig, die eckigen Klammern waren da, um zu implizieren "Geben Sie hier Ihren Tabellennamen ein" :)
Russ Cam
Als eckige Klammern las ich es als " Fügen Sie Ihren Tabellennamen hier in eckige Klammern ein (wegen möglicherweise reservierten Wortes) " und bekam dann keine Übereinstimmungen :) Vielleicht <Table Name>hätte BNF die Mehrdeutigkeit vermieden. Wie auch immer, mir wurde klar, dass Sie das vielleicht beabsichtigt haben, als ich den Kommentar schrieb - es schadet nicht, andere nur für den Fall zu warnen.
JonBrave
1
Funktioniert nur für MSSQL, wenn kein '[]' vorhanden ist und die Anführungszeichen '' um den Tabellennamen herum benötigt werden.
XValidated
14

MS SQL Server:

sp_columns [Tabellenname]

Bryan
quelle
12

Microsoft SQL Server Management Studio 2008 R2:

Wenn Sie in einem Abfrageeditor den Text des Tabellennamens (ex dbo.MyTable) markieren und ALT+ drücken F1, erhalten Sie eine Liste mit Spaltennamen, Typ, Länge usw.

ALT+ F1während Sie hervorgehoben haben, dbo.MyTableentspricht dem Ausführen EXEC sp_help 'dbo.MyTable' gemäß dieser Site

Ich kann die Variationen beim Abfragen von INFORMATION_SCHEMA.COLUMNS nicht zum Laufen bringen, daher verwende ich diese stattdessen.

Leslie Sage
quelle
1
Hat in SSMS 2012 nicht funktioniert. Übrigens meinten Sie SQL Server Management Studio 2008?
Hammad Khan
1
Ja, genauer gesagt, ich meinte Microsoft SQL Server Management Studio 2008 R2. Ich werde bearbeiten.
Leslie Sage
4

SQL Server

So listen Sie alle benutzerdefinierten Tabellen einer Datenbank auf:

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

So listen Sie alle Spalten einer Tabelle auf:

use [databasename]
select name from syscolumns where id=object_id('tablename')
Mircea Grelus
quelle
Heh? Dies ist einfach falsch ... Sie können USE nur für Datenbanken verwenden ... Und die Abfrage gibt alle benutzerdefinierten Tabellen in der Datenbank zurück, was vom OP nicht gewünscht wurde.
Maximilian Mayerl
4

Für SQL Server

sp_help tablename
Luv
quelle
3

Nur eine kleine Korrektur an den anderen in SQL Server (Schema-Präfix wird immer wichtiger!):

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

Beispiel:

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

Nur mein Code

Matthew Lowe
quelle