Вот общее решение, которое возвращает все описания для таблиц и столбцов. Описание таблицы имеет идентификатор столбца ноль.

string SQL = "SELECT TOP 1 * FROM " + TableName;
IDataReader reader = DatabaseClassCreator.ExecSQLReader("", SQL);
DataTable schema = reader.GetSchemaTable();

учил выше, чтобы прочитать информацию о полях в таблице моих баз данных SQL Server 2000. Это работает, но я не могу найти способ получить свойство MS_Description для поля из схемы.

Как мне получить свойство MS_Description для поля?

Ответы на вопрос(4)

Решение Вопроса

чтобы получить данные описания, вам нужно запросить черезINFORMATION_SCHEMA.COLUMNS / sysproperties, Следующий запрос SQL будет работать на SQL Server 2000

SELECT 
    [Table Name] = i_s.TABLE_NAME, 
    [Column Name] = i_s.COLUMN_NAME, 
    [Description] = s.value 
FROM 
    INFORMATION_SCHEMA.COLUMNS i_s 
LEFT OUTER JOIN 
    sysproperties s 
ON 
    s.id = OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME) 
    AND s.smallid = i_s.ORDINAL_POSITION 
    AND s.name = 'MS_Description' 
WHERE 
    OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME), 'IsMsShipped')=0 
    -- AND i_s.TABLE_NAME = 'table_name' 
ORDER BY 
    i_s.TABLE_NAME, i_s.ORDINAL_POSITION

Источник: АРХИВ - ASP FAQs Как мне показать описание свойства столбца?

 Justin80814 янв. 2011 г., 23:07
Совместим ли предоставленный вами SQL с более новыми версиями SQL-сервера, если / когда мы обновляем?
 MrEyes14 янв. 2011 г., 23:04
Схема включает структурную информацию, такую как имя и тип данных столбца. К сожалению, это не включает описания
 Justin80814 янв. 2011 г., 23:01
Таблица схемы выше в моем коде я могу сделать такие вещи, как: схема [0] ["ColumnName"]; чтобы получить имя столбца. Я ищу c # способ получить описание.

которые не соответствовали правильным столбцам. Я попытался выполнить следующий запрос, и он, кажется, работает лучше:

SELECT 
    major_id, minor_id, 
    t.name AS [Table Name], 
    c.name AS [Column Name], 
    value AS [Extended Property]
FROM 
    sys.extended_properties AS ep
INNER JOIN 
    sys.tables AS t ON ep.major_id = t.object_id 
INNER JOIN 
    sys.columns AS c ON ep.major_id = c.object_id 
                     AND ep.minor_id = c.column_id
WHERE 
    class = 1
    AND ep.name = 'MS_Description'

Источник: MSDN - Просмотр расширенных свойств

Я немного изменил это, и теперь это работает для меня.

SELECT 
    [Table Name] = i_s.TABLE_NAME, 
    [Column Name] = i_s.COLUMN_NAME, 
    [Description] = s.value 
FROM 
    INFORMATION_SCHEMA.COLUMNS i_s 
LEFT OUTER JOIN 
    sys.extended_properties s 
ON 
    s.major_id = OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME) 
    AND s.minor_id = i_s.ORDINAL_POSITION 
    AND s.name = 'MS_Description' 
WHERE 
    OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME), 'IsMsShipped')=0 
    -- AND i_s.TABLE_NAME = 'table_name' 
ORDER BY 
    i_s.TABLE_NAME, i_s.ORDINAL_POSITION

которое возвращает все описания для таблиц и столбцов. Описание таблицы имеет идентификатор столбца ноль.

SELECT t.Name TableName, c.column_id, c.name ColumnName, ep.value MS_Description
    FROM sys.objects AS T 
        JOIN sys.columns AS c ON T.object_id = c.object_id
        JOIN sys.extended_properties ep on ep.major_id = T.object_id AND ep.minor_id = c.column_id
    WHERE T.Type = 'U' and ep.name = 'MS_Description'
    UNION ALL
    SELECT  T.name, 0, null, ep.value
    FROM sys.tables T
        JOIN sys.extended_properties ep on T.object_id = ep.major_id AND ep.minor_id = 0
    WHERE T.Type = 'U' and ep.name = 'MS_Description'
ORDER BY t.name, column_id

Ваш ответ на вопрос