Как получить имена столбцов из таблицы в SQL Server?
Я хотел бы запросить имена всех столбцов таблицы. Я нашел как это сделать:
- Oracle
- в MySQL
- PostgreSQL
но мне нужно знать: как это можно сделать Microsoft SQL Server (2008 в моем случае)?
17 ответов
вы можете получить эту информацию и многое, многое другое на запрос представления информационной схемы.
этот пример запроса:
SELECT *
FROM Northwind.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'
можно сделать над всеми этими объектами БД:
- CHECK_CONSTRAINTS
- COLUMN_DOMAIN_USAGE
- COLUMN_PRIVILEGES
- колонки
- CONSTRAINT_COLUMN_USAGE
- CONSTRAINT_TABLE_USAGE
- DOMAIN_CONSTRAINTS
- Домены
- KEY_COLUMN_USAGE
- параметры
- REFERENTIAL_CONSTRAINTS
- подпрограммы
- ROUTINE_COLUMNS
- схемы
- TABLE_CONSTRAINTS
- TABLE_PRIVILEGES
- таблицы
- VIEW_COLUMN_USAGE
- VIEW_TABLE_USAGE
- вид
Вы можете использовать хранимую процедуру sp_columns, которая возвращает информацию, относящуюся ко всем столбцам в данной таблице. Более подробную информацию можно найти здесь http://msdn.microsoft.com/en-us/library/ms176077.aspx
вы также можете сделать это с помощью SQL-запроса. Что - то вроде этого должно помочь ... --5-->
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName')
или вариант такой:
SELECT o.Name, c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
это получает все столбцы из всех таблиц, упорядоченные по имени таблицы, а затем по имени столбца.
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
Это лучше, чем получить от sys.columns
потому что это показывает DATA_TYPE
напрямую.
можно использовать sp_help
в SQL Server 2008.
sp_help <table_name>;
сокращение клавиатуры для приведенной выше команды: выберите имя таблицы (i.e выделите его) и нажмите ALT+F1.
используя этот запрос, вы получаете ответ:
select Column_name
from Information_schema.columns
where Table_name like 'table name'
можно написать этот запрос, чтобы получить имя столбца и все детали без использования INFORMATION_SCHEMA в MySql:
SHOW COLUMNS FROM database_Name.table_name;
--это еще один вариант, используемый для документирования большой базы данных для преобразования (отредактировано в --remove static columns)
SELECT o.Name as Table_Name
, c.Name as Field_Name
, t.Name as Data_Type
, t.length as Length_Size
, t.prec as Precision_
FROM syscolumns c
INNER JOIN sysobjects o ON o.id = c.id
LEFT JOIN systypes t on t.xtype = c.xtype
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
--в левом соединении, c.тип заменяется на c.xtype для получения типов varchar
SELECT name
FROM sys.columns
WHERE object_id = OBJECT_ID('TABLE_NAME')
/ / TABLE_NAME - это ваша таблица
SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position
вы можете попробовать это.Это дает все имена столбцов с соответствующими типами данных.
desc <TABLE NAME> ;
этот вопрос SO отсутствует следующий подход:
-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')
он проверит, является ли данный table
is Базовая Таблица.
SELECT
T.TABLE_NAME AS 'TABLE NAME',
C.COLUMN_NAME AS 'COLUMN NAME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME=C.TABLE_NAME
WHERE T.TABLE_TYPE='BASE TABLE'
AND T.TABLE_NAME LIKE 'Your Table Name'
вы можете использовать этот запрос
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.object_id = OBJECT_ID('TABLE_NAME')
ORDER BY c.Name
еще один вариант, который, возможно, более интуитивно понятен:
SELECT [name]
FROM sys.columns
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]')
это дает вам все ваши имена столбцов в один столбец.
Если вы заботитесь о других метаданных, вы можете изменить изменить инструкцию SELECT на SELECT *
.