Bagaimana cara mendaftar semua kolom dalam tabel?


231

Untuk berbagai sistem basis data populer, bagaimana Anda membuat daftar semua kolom dalam sebuah tabel?


4
Seharusnya ada lencana untuk menulis pertanyaan yang ditutup, tetapi menerima lebih dari 100 upvotes :) OTOH, itu tidak mengherankan bahwa tidak ada jawaban yang diterima, karena ia bertanya tentang banyak basis data, jadi saya tidak setuju dengan keputusan untuk menutup . Senang Q&A ada di sini.
ToolmakerSteve

Jawaban:


255

Untuk MySQL, gunakan:

DESCRIBE name_of_table;

Ini juga berfungsi untuk Oracle selama Anda menggunakan SQL * Plus, atau Oracle Developer SQL.


16
Solusi ini adalah untuk MYSQL bukan MSSQL
Hammad Khan

2
@dmvianna Saya tidak berpikir itu berlaku untuk semua Oracle, tetapi untuk SQL * Plus.
Tripp Kinetics

Itu harus DESCRIBE name_of_table``;
beahacker

untuk sqlite - gunakan: pragma table_info (table_name) yaitu sqlite> pragma table_info (kolom1);
GyRo

Editing, karena DESCRIBEini bukan instruksi Oracle PLSQL tetapi perintah SQL * Plus , dan karena itu tidak berfungsi di sebagian besar SQL IDE.
walen

117

Untuk Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Untuk MySQL

SHOW COLUMNS FROM table_name

4
Anda mungkin ingin memesan permintaan Oracle oleh column_id
David Aldridge

6
Untuk Oracle juga berlaku DESCRIBE name_of_table.
Pigueiras

gunakan <database_name>; tampilkan kolom dalam <table_name> seperti '<column_prefix>%'; Akan membiarkan Anda mendaftar hanya kolom dimulai dengan awalan yang ditentukan. Menghilangkan kurung sudut tentu saja.
rstackhouse

apa yang ada user_tab_colsdalam kueri Anda?
Jogi

@Jogi - Google "oracle user_tab_cols" - bawaan untuk Oracle db.
ToolmakerSteve

103

Untuk MS SQL Server:

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

9
Kolom yang diminati di sini adalah COLUMN_NAME.
Buggieboy

4
Ini harus bekerja pada banyak DBMS. information_schema.columnstampilan sistem adalah bagian dari ANSI SQLstandar ( tautan ).
Bogdan Sahlean

4
jawaban yang bagus tetapi untuk menghindari duplikat saya akan menggunakan:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah

Ini adalah SQL-92 ANSI compliant, dan harus bekerja di semua mesin basis data.
Gareth Davidson

39

(5 tahun belakangan, untuk Kehormatan PostgreSQL, DDBB Kerajaan tercanggih)

Di PostgreSQL:

\d table_name

Atau, menggunakan SQL:

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

4
harus berupa table_name. \ dt table_name mendaftar relasi.
m

36

Saya tahu ini sudah terlambat, tetapi saya menggunakan perintah ini untuk Oracle:

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


Saya mencoba ini di Oracle dan tidak berhasil. Nama_kolom dicetak tetapi tidak ada yang lain. Saya harus menggunakan SELECT CAST (COLUMN_NAME AS CHAR (40)) || '' || DATA_TYPE untuk mendapatkan format yang bagus dan mendapatkan beberapa kolom dengan penggabungan.
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'

atau

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

Cara kedua adalah standar ANSI dan karenanya harus bekerja pada semua database yang sesuai dengan ANSI.


Tak satu pun dari ini bekerja sebagaimana tertulis (atau setidaknya tersirat, seperti yang saya baca) untuk MS SQL Server. Dalam kedua kasus nama tabel kolom toko nama tanpa apa pun [ ]di sekitarnya, sehingga query tidak harus menggunakannya, hanya polos nama tabel. Jika itu bukan niat OP, setidaknya sadari ini.
JonBrave

1
@ JonBrave - itu benar, tanda kurung siku ada di sana untuk menyiratkan "masukkan nama meja Anda di sini" :)
Russ Cam

Menjadi tanda kurung siku, saya membacanya sebagai " masukkan nama tabel Anda di dalam tanda kurung siku (karena kata berpotensi dilindungi) di sini ", dan kemudian tidak cocok :) Mungkin BNF <Table Name>akan menghindari ambiguitas. Ngomong-ngomong, saya menyadari Anda mungkin bermaksud bahwa ketika saya menulis komentar --- tidak ada salahnya untuk memperingatkan orang lain untuk berjaga-jaga.
JonBrave

1
Hanya berfungsi untuk MSSQL jika tidak ada '[]' dan tanda kutip '' diperlukan di sekitar nama tabel.
XValidated


12

Microsoft SQL Server Management Studio 2008 R2:

Di editor kueri, jika Anda menyorot teks nama tabel (ex dbo.MyTable) dan menekan ALT+ F1, Anda akan mendapatkan daftar nama kolom, jenis, panjang, dll.

ALT+ F1saat Anda disorot dbo.MyTablesama dengan berjalan EXEC sp_help 'dbo.MyTable' menurut situs ini

Saya tidak bisa mendapatkan variasi tentang permintaan INFORMATION_SCHEMA.COLUMNS agar berfungsi, jadi saya menggunakan ini sebagai gantinya.


1
Tidak bekerja di SSMS 2012. Btw maksud Anda SQL Server Management Studio 2008?
Hammad Khan

1
Yap, lebih tepatnya saya maksud Microsoft SQL Server Management Studio 2008 R2. Saya akan mengedit.
Leslie Sage

4

SQL Server

Untuk membuat daftar semua tabel yang ditentukan pengguna dari basis data:

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

Untuk membuat daftar semua kolom pada tabel:

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

Heh? Ini hanya salah ... Anda hanya dapat menggunakan USE untuk basis data ... Dan kueri mengembalikan semua tabel yang ditentukan pengguna dalam basis data, yang bukan yang diinginkan OP.
Maximilian Mayerl


3

Hanya sedikit koreksi pada yang lain di SQL Server (skema awalan menjadi lebih penting!):

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

3

Contoh:

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

Hanya kode saya

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.