Как получить имена столбцов из таблицы в SQL Server?

Я хотел бы запросить имена всех столбцов таблицы. Я нашел как это сделать:

  • Oracle
  • в MySQL
  • PostgreSQL

но мне нужно знать: как это можно сделать Microsoft SQL Server (2008 в моем случае)?

17 ответов


вы можете получить эту информацию и многое, многое другое на запрос представления информационной схемы.

этот пример запроса:

SELECT *
FROM Northwind.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'

можно сделать над всеми этими объектами БД:


Вы можете использовать хранимую процедуру 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')

просто запустите эту команду

EXEC sp_columns 'ваше имя таблицы'


он проверит, является ли данный 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 COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'

еще один вариант, который, возможно, более интуитивно понятен:

SELECT [name] 
FROM sys.columns 
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]') 

это дает вам все ваши имена столбцов в один столбец. Если вы заботитесь о других метаданных, вы можете изменить изменить инструкцию SELECT на SELECT *.