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

185

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

  • 1
    Должен быть значок для написания вопроса, который закрывается, но получает более 100 голосов. OTOH, неудивительно, что нет принятого ответа, так как он спрашивает о нескольких базах данных, поэтому я не согласен с решением закрыть , Просто рад, что Q & A здесь.
Теги:
database
sql-server

12 ответов

218

Для MySQL используйте:

DESCRIBE name_of_table;

Это также работает для Oracle, если вы используете SQL * Plus или Oracle SQL Developer.

  • 2
    +1. Это покажет все столбцы в таблице и покажет детали о каждом из столбцов.
  • 13
    Это решение для MYSQL, а не MSSQL
Показать ещё 7 комментариев
100

Для Oracle (PL/SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Для MySQL

SHOW COLUMNS FROM table_name
  • 3
    Возможно, вы захотите заказать запрос Oracle по column_id
  • 5
    Для Oracle действует также DESCRIBE name_of_table .
Показать ещё 3 комментария
82

Для MS SQL Server:

select * from information_schema.columns where table_name = 'tableName'
  • 6
    Интересующий столбец будет COLUMN_NAME.
  • 4
    Это должно работать на многих СУБД. Системное представление information_schema.columns является частью ANSI SQL ( ссылка ).
Показать ещё 1 комментарий
30

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

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

(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 перечисляет отношения.
26

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.

  • 0
    Ни одна из этих работ не работает так, как написано (или, по крайней мере, подразумевается, как я читал) для MS SQL Server. В обоих случаях в столбце имени таблицы хранится имя без [ ] , поэтому запрос не должен использовать их, только простое имя таблицы. Если это не было целью ОП, по крайней мере, знать об этом.
  • 0
    @JonBrave - это правильно, квадратные скобки означали «вставьте здесь имя вашей таблицы» :)
Показать ещё 2 комментария
12

MS SQL Server:

sp_columns [tablename]

9

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. Я отредактирую
Показать ещё 1 комментарий
4

Для SQL Server

sp_help 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

Только мой код

3

Просто небольшая коррекция для остальных в SQL Server (префикс схемы становится все более важным!):

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

SQL Server

Чтобы просмотреть все пользовательские таблицы базы данных:

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

Чтобы перечислить все столбцы таблицы:

use [databasename]
select name from syscolumns where id=object_id('tablename')
  • 0
    Хех? Это просто неправильно ... вы можете использовать USE только для баз данных ... И запрос возвращает все пользовательские таблицы в базе данных, а это не то, что хотел OP.
  • 0
    Ах, прости. Я исправил это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню