Используйте запрос для доступа к описанию столбца в SQL

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

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

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

Screen shot

Здесь указано описание свойств поля

Ответы

Ответ 1

Если по описанию вы имеете в виду "Описание", отображаемое в 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

Ответ 2

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

Кроме этого, здесь есть сообщение с большим количеством хорошей информации о представлениях SCHEMA: Что такое "описать таблицу" в SQL Server?

Ответ 3

Функция 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, триггер, вычисленный столбец, ограничение CHECK, представление или системный объект такой как хранимая процедура системы.

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

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

Ответ 5

Если вы специально хотите использовать 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