2013-02-21 155 views
1

我正在考慮使用擴展屬性來存儲表和列描述,但是我希望能夠搜索所有表以查找特定子字符串的出現。在所有表中搜索列描述描述元

在下面的示例中,顯示的函數返回列表「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%' 

是否有搜索將避免德值字段從SQL_VARIANT爲varchar轉換一個更有效的方法?

將此元數據存儲在用戶定義的自定義表中而不是使用擴展屬性會更明智嗎?

回答

7

您可以查看系統視圖來搜索所有表中的所有列。

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%'; 
+0

謝謝。這工作。作爲後續,我想知道如何查看Programmatability/Functions/System Function/MetaData函數下的listeextendedproperty系統函數的代碼? – ChadD 2013-02-21 17:49:32

+0

您可以使用SELECT OBJECT_DEFINITION(OBJECT_ID('sys.fn_listextendedproperty'));看代碼。這來自http://msdn.microsoft.com/en-us/library/ms190940%28v=sql.110%29.aspx。 – 2013-02-21 17:59:40

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%' 

搜索不區分大小寫。