36

我正在尝试使用 INFORMATION_SCHEMA 访问列描述属性

我过去创建了这个查询来获取列名,但我不知道如何获取列的描述

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

截屏

这是描述在字段属性上的位置

4

5 回答 5

80

如果“描述”是指在设计模式下在 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
于 2013-03-01T16:38:18.407 回答
14

如果您特别想使用 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
于 2017-06-07T10:19:23.080 回答
5

系统功能将fn_listextendedproperty满足您的需求。

它也被称为sys.fn_listextendedproperty.

语法如下:

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可以说比接受答案中的查询更容易使用和更通用。

于 2014-04-17T20:55:36.023 回答
2

exec sp_columns @Tablename... 这是系统存储过程,将为您提供信息。

除此之外,这里有一篇关于 INFORMATION SCHEMA 视图的大量有用信息的帖子:SQL Server 中“描述表”的等价物是什么?

于 2013-03-01T16:16:11.790 回答
0

您是否在 sys.extended_properties 视图中查找信息?

https://stackoverflow.com/a/15008885/1948904

于 2013-03-01T16:37:59.747 回答