2013-03-01 4 views
17

Я пытаюсь получить доступ к колонку Описание свойств с помощью INFORMATION_SCHEMAИспользуйте запрос, чтобы получить доступ описания столбца в SQL

Я создал этот запрос в прошлом, чтобы получить имя столбца, но я не могу понять, как получить Описание колонки

SELECT COLUMN_NAME AS Output, ORDINAL_POSITION 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE (TABLE_NAME = @Tablename) AND (ORDINAL_POSITION = @Location) 

 Screen shot

Это где описание на свойства полевых

+0

Вы также можете сделать sp_helptext yourtablename – DevelopmentIsMyPassion

+0

Какое описание вы имеете в виду? Где вы это видели? – RBarryYoung

ответ

42

Если под «описанием» вы имеете в виду «Описание» отображается в SQL Management Studio в режиме разработки, здесь:

select 
     st.name [Table], 
     sc.name [Column], 
     sep.value [Description] 
    from sys.tables st 
    inner join sys.columns sc on st.object_id = sc.object_id 
    left join sys.extended_properties sep on st.object_id = sep.major_id 
             and sc.column_id = sep.minor_id 
             and sep.name = 'MS_Description' 
    where st.name = @TableName 
    and sc.name = @ColumnName 
+0

Каким будет лучший способ привязать ORDINAL_POSITION к этому? (лучше ли использовать его непосредственно в запросе или я должен использовать COLUMN_NAME, найденный в примере запроса, который я первый раз отправил, чтобы найти описание?) Большое спасибо –

+1

Я считаю, что INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION - это то же самое, что и sys.columns.column_id, поэтому вы должны иметь возможность использовать его непосредственно при запросе sys.extended_properties (as minor_id) – Incidently

+0

У меня постоянно есть этот тип VARANT, а не поддерживаемая ошибка. :(и соединение получилось сразу после него. mssql2012 – Ben

1

exec sp_columns @Tablename ... Это системная хранимая процедура, которая даст вам информацию.

Кроме этого, здесь это пост с большим количеством полезной информации о мнении ИНФОРМАЦИИ Schema: What is the equivalent of 'describe table' in SQL Server?

1

Функция fn_listextendedproperty система будет делать то, что вы ищете для (называемый sys.fn_listextendedproperty для SQL Server 2012 на MSDN).

Синтаксис выглядит следующим образом:

fn_listextendedproperty ( 
    { default | 'property_name' | NULL } 
, { default | 'level0_object_type' | NULL } 
, { default | 'level0_object_name' | NULL } 
, { default | 'level1_object_type' | NULL } 
, { default | 'level1_object_name' | NULL } 
, { default | 'level2_object_type' | NULL } 
, { default | 'level2_object_name' | NULL } 
) 

Пример использования: Списки расширенные свойства для всех столбцов таблицы ScrapReason в схеме Production

USE AdventureWorks2012; 
GO 
SELECT objtype, objname, name, value 
FROM fn_listextendedproperty (NULL, 'schema', 'Production', 'table', 'ScrapReason', 'column', NULL); 
GO 

sp_helptext не будет работать, так как оно не может быть используется для таблиц согласно TechNet.

Показывает определение определенного пользователем правила, по умолчанию, незашифрованном Transact-SQL хранимой процедуры, определенной пользователем функции Transact-SQL, триггер, вычисляемый столбец, проверочное ограничение, вид или объект системы , такие как хранимую процедуру системы.

sp_columns не возвращает поле sys.extended_properties.value, которое вы ищете.

fn_listextendedproperty, возможно, легче работать и более общий, чем запрос в принятом ответе.

0

Если вы специально хотите использовать INFORMATION_SCHEMA (как я), то следующий запрос должен помочь вам получить поле описания столбца:

SELECT COLUMN_NAME AS [Output] 
    ,ORDINAL_POSITION 
    ,prop.value AS [COLUMN_DESCRIPTION] 
FROM INFORMATION_SCHEMA.TABLES AS tbl 
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS col ON col.TABLE_NAME = tbl.TABLE_NAME 
INNER JOIN sys.columns AS sc ON sc.object_id = object_id(tbl.table_schema + '.' + tbl.table_name) 
    AND sc.NAME = col.COLUMN_NAME 
LEFT JOIN sys.extended_properties prop ON prop.major_id = sc.object_id 
    AND prop.minor_id = sc.column_id 
    AND prop.NAME = 'MS_Description' 
WHERE tbl.TABLE_NAME = @TableName 
+0

Почему downvote? –

+1

спасибо, просто то, что мне нужно. Не знаете, почему это было бы downvoted. – Rob

Смежные вопросы