Як перерахувати всі стовпці таблиці?


231

Як для різних популярних систем баз даних, як перелічити всі стовпці таблиці?


4
Має бути знак для написання питання, яке закривається, але отримує понад 100 відгуків :) OTOH, це не дивно, що немає прийнятої відповіді, оскільки він запитує про декілька баз даних, тому я не згоден з рішенням закрити . Просто радий, що питання і відповіді тут.
ToolmakerSteve

Відповіді:


255

Для MySQL використовуйте:

DESCRIBE name_of_table;

Це також працює для Oracle, поки ви використовуєте SQL * Plus або Oracle SQL Developer.


16
Це рішення для MYSQL, а не MSSQL
Хаммад Хан

2
@dmvianna Я не думаю, що це обов'язково стосується всіх Oracle, але для SQL * Plus.
Tripp Kinetics

Це має бути DESCRIBE name_of_table``;
beahacker

для sqlite - використовуйте: pragma table_info (table_name), тобто sqlite> pragma table_info (column1);
GyRo

Редагування, оскільки DESCRIBEце не інструкція Oracle PLSQL, а команда SQL * Plus , і як така вона не працює в більшості SQL IDE.
вален

117

Для Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Для MySQL

SHOW COLUMNS FROM table_name

4
Ви, ймовірно, хочете замовити запит Oracle від column_id
Девід Олдрідж

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 db.
ToolmakerSteve

103

Для MS SQL Server:

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

9
Цікавою колоною тут буде COLUMN_NAME.
Buggieboy

4
Це повинно працювати на багатьох СУБД. information_schema.columnsперегляд системи є частиною ANSI SQLстандарту ( посилання ).
Богдан Салеан

4
Хороша відповідь, але щоб уникнути дублікатів, я би використав:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah

Це сумісний з SQL-92 ANSI і повинен працювати у всіх двигунах бази даних.
Гарет Девідсон

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 іменем таблиці. \ 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, і це не вийшло. Ім'я стовпця було надруковано, але нічого іншого. Мені довелося використовувати SELECT CAST (COLUMN_NAME AS CHAR (40)) || '' || DATA_TYPE, щоб отримати гарний формат і отримати кілька стовпців з конкатенацією.
Еймонн Кенні

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'

або

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 лише тоді, коли немає "[]", а лапки "" потрібні навколо імені таблиці.
XVалидитована


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?
Хаммад Хан

1
Так, точніше, я мав на увазі Microsoft SQL Server Management Studio 2008 R2. Я відредагую.
Леслі Сейдж

4

SQL Server

Щоб перерахувати всі визначені користувачем таблиці бази даних:

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

Щоб перерахувати всі стовпці таблиці:

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

Ага? Це просто неправильно ... ви можете використовувати USE лише для баз даних ... І запит повертає всі визначені користувачем таблиці в базі даних, що не є тим, чого хотів ОП.
Максиміліан Майерл


3

Лише невелика корекція щодо інших у SQL Server (префікс схеми стає все важливішим!):

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

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

Просто мій код

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.