2

我正在考虑使用扩展属性来存储表和列描述,但我希望能够搜索所有表的描述,以查找特定子字符串的出现。

在以下示例中,显示的函数返回表“PEOPLE”的列描述列表。这些描述存储为名称为“MS_DESCRIPTION”的扩展属性。

   SELECT
    cast(VALUE AS VARCHAR(8000)) AS [DESCRIPTION]
                     FROM
                         ::fn_listextendedproperty(NULL
                                                   ,'user'
                                                   ,'dbo'
                                                   ,'table'
                                                   ,'PEOPLE'
                                                   ,'column'
                                                   ,NULL)

但是,如何在所有表中搜索给定子字符串的所有列描述?

SELECT
    cast(VALUE AS VARCHAR(8000)) AS [DESCRIPTION]
                     FROM
                         ::fn_listextendedproperty(NULL
                                                   ,'user'
                                                   ,'dbo'
                                                   ,'table'
                                                   ,'?'
                                                   ,'column'
                                                   ,NULL)
    where cast(VALUE AS VARCHAR(8000)) LIKE '%SEARCH%'

是否有更有效的搜索方法可以避免将 VALUE 字段从 SQL_VARIANT 转换为 varchar?

将此元数据存储在用户定义的自定义表中而不是使用扩展属性会更明智吗?

4

2 回答 2

8

您可以查看系统视图以搜索所有表中的所有列。

SELECT schemas.name schemaName
     , tables.name tableName
     , columns.name columnName
     , extended_properties.value extendedProperties
  FROM sys.schemas
 INNER JOIN sys.tables
    ON schemas.schema_id = tables.schema_id
 INNER JOIN sys.columns
    ON tables.object_id = columns.object_id
 INNER JOIN sys.extended_properties
    ON tables.object_id = extended_properties.major_id
   AND columns.column_id = extended_properties.minor_id
   AND extended_properties.name = 'MS_Description'
   AND CAST( extended_properties.value AS nvarchar(max) ) LIKE '%SEARCH%';
于 2013-02-21T17:45:21.000 回答
1

要查找某个名称的列,user1948904 的解决方案会更简单一些:

SELECT schemas.name schemaName
   , tables.name tableName
   , columns.name columnName
   , * -- for context if you like
 FROM sys.schemas
 INNER JOIN sys.tables
   ON schemas.schema_id = tables.schema_id
 INNER JOIN sys.columns
   ON tables.object_id = columns.object_id
 WHERE columns.name LIKE '%SEARCH%'

搜索不区分大小写。

于 2013-08-27T14:44:03.070 回答