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?


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.


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

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'

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

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'


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 .


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


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.


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

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


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');

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.