Какая команда SQL возвращает имена полей таблицы?

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


person WalkingRandomly    schedule 19.09.2008    source источник


Ответы (12)


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'
person Vinko Vrsalovic    schedule 19.09.2008
comment
Информационная схема также доступна в SQL Server 2000. - person Martynnw; 19.09.2008
comment
А в Postgres, на от 8.0 (в более старых версиях не проверял) - person Mureinik; 27.06.2015

Стандарт 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]')
person hollystyles    schedule 19.09.2008

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

eg

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

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

eg

sp_help '[table name]'
person jules    schedule 19.09.2008

PostgreSQL понимает

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

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

\d myTable

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

person dland    schedule 19.09.2008

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

SELECT column_name FROM user_tab_columns WHERE table_name = 'TABLENAME'
person Rene    schedule 19.09.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         
person 8jean    schedule 19.09.2008

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

show fields from [tablename];

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

person Steve Obbayi    schedule 19.09.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'
person Graeme Perrow    schedule 19.09.2008

MySQL такой же:

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
person Veynom    schedule 19.09.2008

Если вам просто нужны имена столбцов, тогда

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

В MS SQL Server для получения дополнительных сведений о таблице, например о типах столбцов, используйте

sp_help 'tablename'
person Matt Howells    schedule 19.09.2008

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

SELECT TABNAME,COLNAME from SYSCAT.COLUMNS where TABNAME='MYTABLE'
person brabster    schedule 20.09.2008

MySQL

describe tablename
person Z99    schedule 19.09.2008