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.
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'
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';
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
INNERJOIN
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.
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.
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.
Jawaban:
Untuk MySQL, gunakan:
Ini juga berfungsi untuk Oracle selama Anda menggunakan SQL * Plus, atau Oracle Developer SQL.
sumber
DESCRIBE
name_of_table``;DESCRIBE
ini bukan instruksi Oracle PLSQL tetapi perintah SQL * Plus , dan karena itu tidak berfungsi di sebagian besar SQL IDE.Untuk Oracle (PL / SQL)
Untuk MySQL
sumber
DESCRIBE name_of_table
.user_tab_cols
dalam kueri Anda?Untuk MS SQL Server:
sumber
information_schema.columns
tampilan sistem adalah bagian dariANSI SQL
standar ( tautan ).select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
(5 tahun belakangan, untuk Kehormatan PostgreSQL, DDBB Kerajaan tercanggih)
Di PostgreSQL:
Atau, menggunakan SQL:
sumber
Saya tahu ini sudah terlambat, tetapi saya menggunakan perintah ini untuk Oracle:
sumber
SQL Server
atau
Cara kedua adalah standar ANSI dan karenanya harus bekerja pada semua database yang sesuai dengan ANSI.
sumber
[
]
di sekitarnya, sehingga query tidak harus menggunakannya, hanya polos nama tabel. Jika itu bukan niat OP, setidaknya sadari ini.<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.MS SQL Server:
sp_columns [tablename]
sumber
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.MyTable
sama dengan berjalanEXEC sp_help 'dbo.MyTable'
menurut situs iniSaya tidak bisa mendapatkan variasi tentang permintaan INFORMATION_SCHEMA.COLUMNS agar berfungsi, jadi saya menggunakan ini sebagai gantinya.
sumber
SQL Server
Untuk membuat daftar semua tabel yang ditentukan pengguna dari basis data:
Untuk membuat daftar semua kolom pada tabel:
sumber
Untuk SQL Server
sumber
Hanya sedikit koreksi pada yang lain di SQL Server (skema awalan menjadi lebih penting!):
sumber
Contoh:
Hanya kode saya
sumber