Jak wyświetlić wszystkie kolumny w tabeli?


231

Jak wyświetlić wszystkie kolumny w tabeli dla różnych popularnych systemów baz danych?


4
Powinna być plakietka do napisania pytania, które zostanie zamknięte, ale otrzyma ponad 100 głosów pozytywnych :) OTOH, nic dziwnego, że nie ma akceptowanej odpowiedzi, ponieważ pyta o wiele baz danych, więc nie zgadzam się z decyzją o zamknięciu . Cieszę się, że pytania i odpowiedzi są tutaj.
ToolmakerSteve

Odpowiedzi:


255

W przypadku MySQL użyj:

DESCRIBE name_of_table;

Działa to również w przypadku Oracle, o ile korzystasz z SQL * Plus lub Oracle SQL Developer.


16
To rozwiązanie jest przeznaczone dla MYSQL, a nie MSSQL
Hammad Khan

2
@dmvianna Nie sądzę, że musi to dotyczyć całej Oracle, ale SQL * Plus.
Tripp Kinetics,

Powinien to być DESCRIBE nazwa_tabeli``;
beahacker

dla sqlite - użyj: pragma table_info (nazwa_tabeli) tj. sqlite> pragma table_info (kolumna1);
GyRo

Edycja, ponieważ DESCRIBEnie jest instrukcją Oracle PLSQL, ale poleceniem SQL * Plus i jako taka nie działa w większości IDE SQL.
wal

117

Dla Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Dla MySQL

SHOW COLUMNS FROM table_name

4
Prawdopodobnie zechcesz zamówić zapytanie Oracle według column_id
David Aldridge,

6
Dla Oracle jest również ważny DESCRIBE name_of_table.
Pigueiras

użyj <nazwa_bazy_danych>; pokaż kolumny w <nazwie_tabeli> jak „<przedrostek_kolumny>%”; Pozwoli ci wymienić tylko kolumny zaczynające się od podanego prefiksu. Oczywiście pomijając nawiasy kątowe.
rstackhouse

co jest user_tab_colsw twoim zapytaniu?
Jogi,

@ Jogi - Google „oracle user_tab_cols” - wbudowany w Oracle db.
ToolmakerSteve

103

W przypadku MS SQL Server:

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

9
Interesująca kolumna to COLUMN_NAME.
Buggieboy

4
Powinno to działać na wielu systemach DBMS. information_schema.columnswidok systemu jest częścią ANSI SQLstandardu ( link ).
Bogdan Sahlean

4
dobra odpowiedź, ale aby uniknąć duplikatów, select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
użyłbym

Jest to zgodne z SQL-92 ANSI i powinno działać we wszystkich silnikach baz danych.
Gareth Davidson

39

(5 lat później, na cześć PostgreSQL, najbardziej zaawansowanego DDBB Królestwa)

W PostgreSQL:

\d table_name

Lub używając SQL:

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

4
powinna być \ d nazwa_tabeli. \ dt nazwa_tabeli wyświetla relacje.
l85m

36

Wiem, że jest późno, ale używam tego polecenia dla Oracle:

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


Próbowałem tego w Oracle i to nie działało. Nazwa kolumny została wydrukowana, ale nic więcej. Musiałem użyć SELECT CAST (COLUMN_NAME AS CHAR (40)) || „” || DATA_TYPE, aby uzyskać ładny format i uzyskać wiele kolumn z konkatenacją.
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'

lub

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

Drugi sposób to standard ANSI i dlatego powinien działać na wszystkich bazach danych zgodnych z ANSI.


Żadne z nich nie działa tak, jak napisano (lub przynajmniej implikowano, jak czytałem) dla MS SQL Server. W obu przypadkach kolumna z nazwą tabeli przechowuje nazwę bez żadnego [ ]otoczenia, więc zapytanie nie może ich używać, tylko zwykła nazwa tabeli. Jeśli nie taki był plan PO, to przynajmniej bądź tego świadomy.
JonBrave,

1
@JonBrave - to prawda, nawiasy kwadratowe miały sugerować „wstaw tutaj nazwę tabeli” :)
Russ Cam

Będąc nawiasami kwadratowymi, czytam to jako „ wstaw nazwę tabeli w nawiasach kwadratowych (z powodu potencjalnie zarezerwowanego słowa) tutaj ”, a następnie nie znalazłem żadnych dopasowań :) Być może BNF <Table Name>uniknąłby dwuznaczności. W każdym razie, zdałem sobie sprawę, że mogłeś tak postąpić, kiedy napisałem komentarz - nie szkodzi ostrzec innych na wszelki wypadek.
JonBrave

1
Działa tylko w przypadku MSSQL, jeśli nie ma „[]”, a wokół nazwy tabeli potrzebne są cudzysłowy.
XV zatwierdzony


12

Microsoft SQL Server Management Studio 2008 R2:

W edytorze zapytań, jeśli podświetlisz tekst nazwy tabeli (np. Dbo.MyTable) i naciśniesz ALT+ F1, otrzymasz listę nazw kolumn, typów, długości itp.

ALT+ F1gdy już zaznaczyłeś, dbo.MyTablejest to odpowiednik działania EXEC sp_help 'dbo.MyTable' zgodnie z tą witryną

Nie mogę uzyskać różnych wariantów zapytań INFORMACJE_SCHEMA.COLUMNS do działania, więc używam tego zamiast tego.


1
Nie działał w SSMS 2012. Btw miałeś na myśli SQL Server Management Studio 2008?
Hammad Khan

1
Tak, a ściślej miałem na myśli Microsoft SQL Server Management Studio 2008 R2. Będę edytować.
Leslie Sage,

4

SQL Server

Aby wyświetlić listę wszystkich zdefiniowanych przez użytkownika tabel bazy danych:

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

Aby wyświetlić wszystkie kolumny tabeli:

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

Heh To jest po prostu złe ... możesz użyć USE tylko do baz danych ... A zapytanie zwraca wszystkie tabele zdefiniowane przez użytkownika w bazie danych, co nie jest tym, czego chciał OP.
Maximilian Mayerl


3

Wystarczy niewielka korekta pozostałych w SQL Server (prefiks schematu staje się coraz ważniejszy!):

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

3

Przykład:

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

Tylko mój kod

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.