Что такое команда SQL для возврата имен полей таблицы? - PullRequest
37 голосов
/ 19 сентября 2008

Скажем, у меня есть таблица myTable. Какая команда SQL возвращает все имена полей этой таблицы? Если ответ зависит от базы данных, мне нужен SQL Server прямо сейчас, но было бы интересно посмотреть на решение и для других систем баз данных.

Ответы [ 12 ]

59 голосов
/ 19 сентября 2008

MySQL 3 и 4 (и 5):

desc tablename

который является псевдонимом для

show fields from tablename

SQL Server (с 2000 года) и MySQL 5:

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'tablename'

Завершение ответа: как сказали люди ниже, в SQL Server вы также можете использовать хранимую процедуру sp_help

exec sp_help 'tablename'
12 голосов
/ 19 сентября 2008

Стандарт SQL-92 определяет INFORMATION_SCHEMA, который соответствует rdbms, как и поддержка MS SQL Server. Следующее работает для MS SQL Server 2000/2005/2008 и MySql 5 и выше

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'myTable'

MS SQl для конкретного сервера:

exec sp_help 'myTable'

Это решение возвращает несколько результирующих наборов, в которых находится та информация, которую вы хотите, где, поскольку первая дает вам именно то, что вы хотите.

Также просто для полноты вы можете запросить таблицы sys напрямую. Это не рекомендуется, поскольку схема может меняться между версиями SQL Server, а INFORMATION_SCHEMA - это уровень абстракции над этими таблицами. Но здесь это в любом случае для SQL Server 2000

select [name] from dbo.syscolumns where id = object_id(N'[dbo].[myTable]')
4 голосов
/ 19 сентября 2008

PostgreSQL понимает

select column_name from information_schema.columns where table_name = 'myTable'

синтаксис. Если вы работаете в оболочке psql, вы также можете использовать

\d myTable

для описания (столбцы, их типы данных и ограничения)

4 голосов
/ 19 сентября 2008

Для тех, кто ищет ответ в Oracle:

SELECT column_name FROM user_tab_columns WHERE table_name = 'TABLENAME'
4 голосов
/ 19 сентября 2008

Вы можете использовать предоставленные системные представления для этого:

например

select * from INFORMATION_SCHEMA.COLUMNS
where table_name = '[table name]'

в качестве альтернативы, вы можете использовать систему proc sp_help

1010 * например *

sp_help '[table name]'
3 голосов
/ 19 сентября 2008

Просто для полноты, поскольку MySQL и Postgres уже упоминались: в SQLite используйте "pragma table_info()"

sqlite> pragma table_info('table_name');
cid         name        type        notnull     dflt_value  pk        
----------  ----------  ----------  ----------  ----------  ----------
0           id          integer     99                      1         
1           name                    0                       0         
2 голосов
/ 19 сентября 2008

В Sybase SQL Anywhere столбцы и информация о таблицах хранятся отдельно, поэтому необходимо объединение:

select c.column_name from systabcol c 
       key join systab t on t.table_id=c.table_id 
       where t.table_name='tablename'
2 голосов
/ 19 сентября 2008

Это также специфично для MySQL:

show fields from [tablename];

это не только показывает имена таблиц, но также извлекает всю информацию о полях.

1 голос
/ 20 сентября 2008

Для IBM DB2 (дважды проверьте это в понедельник.)

SELECT TABNAME,COLNAME from SYSCAT.COLUMNS where TABNAME='MYTABLE'
1 голос
/ 19 сентября 2008

MySQL такой же:

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...