从表中删除字段后获取列描述

时间:2015-06-26 12:29:31

标签: sql sql-server-2012

我需要从SQL Server 2012获取字段描述。

此查询没问题

SELECT 
    Discription_Table.value
FROM 
    sys.extended_properties as Discription_Table,
    information_schema.COLUMNS as Column_Table
WHERE 
    Column_Table.TABLE_NAME = 'Users'
    AND Column_Table.ORDINAL_POSITION = Discription_Table.minor_id
    AND Column_Table.COLUMN_NAME = 'Login'

但是如果表格用户中的一个列在进行描述后被删除则不再有效。

原因 ORDINAL_POSITION 不再是 minor_id

我该如何解决? Management Studio不得不解决这个问题。

我的解决方案:我需要使用其他表格。

也许我是一个习惯"和#34;旧学校",但对我来说,这个解决方案更清晰,更具可读性。

SELECT extended_properties.value
FROM sys.schemas,sys.tables,sys.columns,sys.extended_properties
WHERE
    schemas.schema_id = tables.schema_id
    and tables.object_id = columns.object_id
    and tables.object_id = extended_properties.major_id
    AND columns.column_id = extended_properties.minor_id
    And tables.name='Users'
    And columns.name='Access_Key'

谢谢大家。

2 个答案:

答案 0 :(得分:1)

我相信你是在fn_listextendedproperty

之后

示例:获取表dbo.MyTable

中所有列的信息
SELECT objtype, objname, name, value FROM 
fn_listextendedproperty(NULL, 'schema', 'dbo', 'table', 'MyTable', 'column', NULL)

(去挖掘并添加MSDN链接我确定在某处,稍后会在那里) MSDN docs here

要仅获取特定列的数据,请将最后一个NULL替换为其名称(不存在的列将以空结果集结束,不会出现错误)。

答案 1 :(得分:0)

请尝试以下查询以获取列的扩展属性:

SELECT objtype, objname, name, value 
FROM fn_listextendedproperty(NULL, 'schema', '<Schema>', 'table', 'Users', 'column', 'Login')

使用表格的模式名称