Как мне перечислить все столбцы в таблице?

231

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

MattGrommes
источник
4
Там должен быть значок для написания вопроса, который закрывается, но получает более 100 голосов :) ОТО, неудивительно, что нет принятого ответа, так как он спрашивает о нескольких базах данных, поэтому я не согласен с решением закрыть , Просто рад, что Q & A здесь.
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``;
Бэхакер
для 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
MattGrommes
источник
4
Возможно, вы захотите заказать запрос Oracle по column_id
Дэвид Олдридж
6
Для Oracle действует также DESCRIBE name_of_table.
Pigueiras
использовать <имя_базы_данных>; показывать столбцы в <table_name> как '<column_prefix>%'; Позволит вам перечислить только столбцы, начиная с указанного префикса. Опуская угловые скобки конечно.
rstackhouse
что user_tab_colsв вашем запросе?
Йог
@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';
earizon
источник
4
должно быть \ d table_name. \ dt table_name перечисляет отношения.
18
36

Я знаю, что уже поздно, но я использую эту команду для Oracle:

select column_name,data_type,data_length from all_tab_columns where TABLE_NAME = 'xxxx' AND OWNER ='xxxxxxxxxx'
ka_lin
источник
Я попробовал это в 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, если нет '[]' и кавычки '' необходимы вокруг имени таблицы.
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. Кстати, вы имели в виду 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 только для баз данных ... И запрос возвращает все пользовательские таблицы в базе данных, а это не то, что хотел OP.
Максимилиан Майерл
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

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

Мэтью Лоу
источник