Что такое команда SQL для возврата имен полей таблицы?
Скажем, у меня есть таблица myTable. Какая команда SQL возвращает все имена полей этой таблицы? Если ответ зависит от базы данных, мне нужен SQL Server прямо сейчас, но было бы интересно посмотреть на решение и для других систем баз данных.
13 ответов
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'
Стандарт 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]')
PostgreSQL понимает
select column_name from information_schema.columns where table_name = 'myTable'
синтаксис. Если вы работаете в оболочке psql, вы также можете использовать
\d myTable
для описания (столбцы, их типы данных и ограничения)
Вы можете использовать предоставленные системные представления, чтобы сделать это:
например
select * from INFORMATION_SCHEMA.COLUMNS
where table_name = '[table name]'
В качестве альтернативы, вы можете использовать систему proc sp_help
например
sp_help '[table name]'
Для тех, кто ищет ответ в Oracle:
SELECT column_name FROM user_tab_columns WHERE table_name = 'TABLENAME'
Просто для полноты, поскольку 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
В 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'
Это также специфично для MySQL:
show fields from [tablename];
это не только показывает имена таблиц, но также извлекает всю информацию о полях.
MySQL такой же:
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
Если вы просто хотите имена столбцов, то
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
В MS SQL Server для получения дополнительной информации о таблице, такой как типы столбцов, используйте
sp_help 'tablename'
Для IBM DB2 (дважды проверим это в понедельник.)
SELECT TABNAME,COLNAME from SYSCAT.COLUMNS where TABNAME='MYTABLE'
выберите COLUMN_NAME1,COLUMN_NAME2 из SCHEMA_NAME.TABLE_NAME, где TABLE_NAME.COLUMN_NAME = 'COLUMN_NAME1';