Скажем, у меня есть таблица myTable. Какая команда SQL возвращает все имена полей этой таблицы? Если ответ касается конкретной базы данных, мне нужен SQL Server прямо сейчас, но мне было бы интересно увидеть решение и для других систем баз данных.
Какая команда SQL возвращает имена полей таблицы?
Ответы (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'
Стандарт 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]')
Для этого вы можете использовать предоставленные системные представления:
eg
select * from INFORMATION_SCHEMA.COLUMNS
where table_name = '[table name]'
в качестве альтернативы вы можете использовать системную процедуру sp_help
eg
sp_help '[table name]'
PostgreSQL понимает
select column_name from information_schema.columns where table_name = 'myTable'
синтаксис. Если вы работаете в оболочке psql, вы также можете использовать
\d myTable
для описания (столбцы, их типы данных и ограничения)
Для тех, кто ищет ответ в 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
Это также специфично для MySQL:
show fields from [tablename];
это не просто показывает имена таблиц, но также извлекает всю информацию о полях.
В 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 такой же:
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'
MySQL
describe tablename