Там должен быть значок для написания вопроса, который закрывается, но получает более 100 голосов :) ОТО, неудивительно, что нет принятого ответа, так как он спрашивает о нескольких базах данных, поэтому я не согласен с решением закрыть , Просто рад, что Q & A здесь.
ToolmakerSteve
Ответы:
255
Для MySQL используйте:
DESCRIBE name_of_table;
Это также работает для Oracle, если вы используете SQL * Plus или Oracle SQL Developer.
Возможно, вы захотите заказать запрос 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'
Это должно работать на многих СУБД. 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';
Я попробовал это в Oracle, и это не сработало. Имя столбца было напечатано, но больше ничего. Мне пришлось использовать SELECT CAST (COLUMN_NAME AS CHAR (40)) || '' || DATA_TYPE для получения хорошего формата и получения нескольких столбцов с конкатенацией.
Имонн Кенни
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'
или
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, если нет '[]' и кавычки '' необходимы вокруг имени таблицы.
В редакторе запросов, если вы выделите текст имени таблицы (например, dbo.MyTable) и нажмете ALT+ F1, вы получите список имен столбцов, типа, длины и т. Д.
ALT+ в F1то время как вы выдвинули dbo.MyTableна первый план является эквивалентом работы в EXEC sp_help 'dbo.MyTable'соответствии с этим сайтом
Я не могу заставить работать варианты INFORMATION_SCHEMA.COLUMNS, поэтому я использую это вместо этого.
Хех? Это просто неправильно ... вы можете использовать USE только для баз данных ... И запрос возвращает все пользовательские таблицы в базе данных, а это не то, что хотел OP.
Ответы:
Для MySQL используйте:
Это также работает для Oracle, если вы используете SQL * Plus или Oracle SQL Developer.
источник
DESCRIBE
name_of_table``;DESCRIBE
это не инструкция Oracle PLSQL, а команда SQL * Plus , и поэтому она не работает в большинстве сред SQL IDE.Для Oracle (PL / SQL)
Для MySQL
источник
DESCRIBE name_of_table
.user_tab_cols
в вашем запросе?Для MS SQL Server:
источник
information_schema.columns
Системный вид является частьюANSI SQL
стандарта ( ссылка ).select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
(5 лет спустя, к чести PostgreSQL, самого продвинутого DDBB Королевства)
В PostgreSQL:
Или, используя SQL:
источник
Я знаю, что уже поздно, но я использую эту команду для Oracle:
источник
SQL Server
или
Второй способ - это стандарт ANSI, поэтому он должен работать со всеми базами данных, совместимыми с ANSI.
источник
[
]
символов, поэтому запрос не должен использовать их, только простое имя таблицы. Если это не было целью ОП, по крайней мере, знать об этом.<Table Name>
избежал бы двусмысленности. Во всяком случае, я понял, что вы, возможно, намеревались, что, когда я написал комментарий - на всякий случай не вредно предупреждать других.MS SQL Server:
sp_columns [имя таблицы]
источник
Microsoft SQL Server Management Studio 2008 R2:
В редакторе запросов, если вы выделите текст имени таблицы (например, dbo.MyTable) и нажмете ALT+ F1, вы получите список имен столбцов, типа, длины и т. Д.
ALT+ в F1то время как вы выдвинули
dbo.MyTable
на первый план является эквивалентом работы вEXEC sp_help 'dbo.MyTable'
соответствии с этим сайтомЯ не могу заставить работать варианты INFORMATION_SCHEMA.COLUMNS, поэтому я использую это вместо этого.
источник
SQL Server
Чтобы вывести список всех пользовательских таблиц базы данных:
Чтобы перечислить все столбцы таблицы:
источник
Для SQL Server
источник
Небольшое исправление остальных в SQL Server (префикс схемы становится все более важным!):
источник
Пример:
Просто мой код
источник