ฉันจะแสดงรายการคอลัมน์ทั้งหมดในตารางได้อย่างไร


231

สำหรับระบบฐานข้อมูลยอดนิยมต่างๆคุณจะแสดงรายการคอลัมน์ทั้งหมดในตารางได้อย่างไร


4
ควรมีตราสัญลักษณ์สำหรับการเขียนคำถามที่ถูกปิด แต่ได้รับมากกว่า 100 upvotes :) OTOH มันไม่น่าแปลกใจที่ไม่มีคำตอบที่ยอมรับได้เนื่องจากมันถามเกี่ยวกับฐานข้อมูลหลายแห่งดังนั้นฉันจึงไม่เห็นด้วยกับการตัดสินใจปิด . แค่ดีใจที่ถาม & ตอบอยู่ที่นี่
ToolmakerSteve

คำตอบ:


255

สำหรับ MySQL ให้ใช้:

DESCRIBE name_of_table;

สิ่งนี้ใช้ได้กับ Oracle ตราบใดที่คุณใช้ SQL * Plus หรือ SQL Developer ของ Oracle


16
วิธีนี้ใช้สำหรับ MYSQL ไม่ใช่ MSSQL
Hammad Khan

2
@dmvianna ฉันไม่คิดว่าจำเป็นต้องใช้กับ Oracle ทั้งหมดยกเว้น SQL * Plus
Tripp Kinetics

มันควรเป็นDESCRIBE name_of_table``;
beahacker

สำหรับ sqlite - ใช้งาน: pragma table_info (table_name) เช่น sqlite> pragma table_info (คอลัมน์ 1);
GyRo

การแก้ไขเนื่องจากDESCRIBEไม่ใช่คำสั่ง Oracle PLSQL แต่เป็นคำสั่ง SQL * Plusและไม่สามารถใช้งานได้กับ SQL IDEs ส่วนใหญ่
walen

117

สำหรับ Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

สำหรับ MySQL

SHOW COLUMNS FROM table_name

4
คุณอาจต้องการเรียงลำดับข้อความค้นหาของออราเคิลโดย column_id
David Aldridge

6
สำหรับ Oracle นั้นใช้ได้เช่นDESCRIBE name_of_tableกัน
Pigueiras

ใช้ <database_name>; แสดงคอลัมน์ใน <table_name> เช่น '<column_prefix>%'; จะให้คุณแสดงเฉพาะคอลัมน์ที่ขึ้นต้นด้วยคำนำหน้าที่ระบุ ละเว้นวงเล็บมุมแน่นอน
rstackhouse

สิ่งที่อยู่user_tab_colsในแบบสอบถามของคุณหรือไม่
Jogi

@Jogi - Google "oracle user_tab_cols" - ฐานข้อมูล Oracle ในตัว
ToolmakerSteve

103

สำหรับเซิร์ฟเวอร์ MS SQL:

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

9
คอลัมน์ที่น่าสนใจที่นี่คือ COLUMN_NAME
Buggieboy

4
สิ่งนี้ควรใช้กับ DBMS จำนวนมาก information_schema.columnsมุมมองระบบเป็นส่วนหนึ่งของ ANSI SQLมาตรฐาน ( ลิงก์ )
Bogdan Sahlean

4
คำตอบที่ดี แต่เพื่อหลีกเลี่ยงการซ้ำซ้อนฉันจะใช้:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah

สิ่งนี้สอดคล้องกับ SQL-92 ANSI และควรทำงานกับเอ็นจิ้นฐานข้อมูลทั้งหมด
Gareth Davidson

39

(5 ปีต่อมาเพื่อเป็นเกียรติแก่ PostgreSQL ซึ่งเป็น DDBB ขั้นสูงสุดของราชอาณาจักร)

ใน PostgreSQL:

\d table_name

หรือใช้ SQL:

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

4
ควรเป็น \ d table_name \ dt table_name แสดงความสัมพันธ์
l85m

36

ฉันรู้ว่ามันช้า แต่ฉันใช้คำสั่งนี้สำหรับ Oracle:

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


ฉันลองสิ่งนี้ใน Oracle และไม่ได้ผล Column_name ถูกพิมพ์ แต่ไม่มีอะไรอื่น ฉันต้องใช้ SELECT CAST (COLUMN_NAME เป็น CHAR (40)) || '' || DATA_TYPE เพื่อให้ได้รูปแบบที่ดีและรับหลายคอลัมน์พร้อมกัน
Eamonn Kenny

27

เซิร์ฟเวอร์ SQL

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

หรือ

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

วิธีที่สองคือมาตรฐาน ANSI ดังนั้นควรทำงานกับฐานข้อมูลที่สอดคล้องกับ ANSI ทั้งหมด


งานเหล่านี้ทั้งที่เขียน (หรืออย่างน้อยก็โดยนัยตามที่ฉันอ่าน) สำหรับ MS SQL Server ในทั้งสองกรณีคอลัมน์ชื่อตารางจะจัดเก็บชื่อโดยไม่มีชื่อใด[ ]ๆ ดังนั้นเคียวรีต้องไม่ใช้ชื่อเฉพาะชื่อตารางธรรมดา ถ้านั่นไม่ใช่ความตั้งใจของโอพีอย่างน้อยก็ต้องระวังสิ่งนี้
JonBrave

1
@JonBrave - ถูกต้องวงเล็บเหลี่ยมอยู่ที่นั่นเพื่อบอกเป็นนัย"ใส่ชื่อตารางของคุณที่นี่" :)
Russ Cam

เป็นวงเล็บเหลี่ยมฉันอ่านมันเป็น " แทรกชื่อตารางของคุณภายในวงเล็บเหลี่ยม (เพราะคำสงวนอาจ) ที่นี่ " แล้วไม่มีการแข่งขัน :) บางที BNF <Table Name>อาจหลีกเลี่ยงความคลุมเครือ อย่างไรก็ตามฉันตระหนักว่าคุณอาจมีความตั้งใจที่เมื่อฉันเขียนความคิดเห็น - มันไม่เป็นอันตรายต่อการเตือนผู้อื่นในกรณีที่
JonBrave

1
ใช้งานได้กับ MSSQL หากไม่มี '[]' และเครื่องหมายคำพูด '' จำเป็นต้องมีรอบชื่อตาราง
XValidated


12

Microsoft SQL Server Management Studio 2008 R2:

ในเครื่องมือแก้ไขแบบสอบถามหากคุณเน้นข้อความชื่อตาราง (เช่น dbo.MyTable) และกดALT+ F1คุณจะได้รับรายการชื่อคอลัมน์ประเภทความยาว ฯลฯ

ALT+ F1ในขณะที่คุณไฮไลต์dbo.MyTableเทียบเท่ากับการทำงานEXEC sp_help 'dbo.MyTable' ตามไซต์นี้

ฉันไม่สามารถรับรูปแบบต่างๆเกี่ยวกับการสืบค้น INFORMATION_SCHEMA.COLUMNS ให้ทำงานดังนั้นฉันจึงใช้สิ่งนี้แทน


1
ไม่ได้ทำงานใน SSMS 2012 Btw คุณหมายถึง SQL Server Management Studio 2008 หรือไม่
Hammad Khan

1
ใช่ฉันหมายถึง Microsoft SQL Server Management Studio 2008 R2 ยิ่งขึ้น ฉันจะแก้ไข
Leslie Sage

4

เซิร์ฟเวอร์ SQL

ในการแสดงตารางทั้งหมดที่ผู้ใช้กำหนดของฐานข้อมูล:

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

หากต้องการแสดงคอลัมน์ทั้งหมดของตาราง:

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

หึ? นี่เป็นความผิดพลาด ... คุณสามารถใช้ USE สำหรับฐานข้อมูลเท่านั้น ... และแบบสอบถามจะส่งคืนตารางทั้งหมดที่ผู้ใช้กำหนดในฐานข้อมูลซึ่งไม่ใช่สิ่งที่ OP ต้องการ
Maximilian Mayerl



3

ตัวอย่าง:

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

แค่รหัสของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.