2016-10-16 103 views
1

我正在使用SQL服務器2008 我想要獲取與數據庫相關的特定屬性的服務器中的所有數據庫。 例如說我們有一個擴展的屬性,其鍵值爲服務器中某些數據庫的「x」。 我想要得到的結果是如何獲取所有數據庫的擴展屬性列表?

DatabaseName | x 
Db1   | value1 
Db2   | value2 
Db3   | value3 
Db4   | null 

其中DB4沒有與主要的擴展屬性的「X」

任何幫助 非常感謝您

+0

屬性'x'是什麼?任何示例?關於數據庫的主要數據存儲在這裏'SELECT * FROM sys.databases' – gofr1

+0

sql server中的每個數據庫都具有作爲鍵值對的擴展屬性 我希望使用鍵「x」的擴展屬性。 – Motaz

+0

我懂了!希望我的回答會幫助你。 – gofr1

回答

0

您可以使用sys.extended_propertiesinfo)和動態SQL來獲取所有擴展屬性。

IF OBJECT_ID(N'#extprops') IS NOT NULL DROP TABLE #extprops 

CREATE TABLE #extprops (
    dbname nvarchar(max), 
    class_desc sql_variant, 
    [name] sql_variant, 
    [value] sql_variant 
) 

DECLARE @sql nvarchar(max) 

SELECT @sql = (
    SELECT 'USE '+QUOTENAME([name])+ ' INSERT INTO #extprops SELECT ''' +[name] + ''' as dbname, class_desc, [name], [value] FROM sys.extended_properties;' +CHAR(10) 
    FROM sys.databases 
    FOR XML PATH('') 
) 

PRINT @sql 

EXEC sp_executesql @sql 

SELECT * 
FROM #extprops 

輸出:

dbname   class_desc   name         value 
msdb   DATABASE   Microsoft_Management_Utility_Version ___SQLVERSION___NEW___ 
AdventureWorks DATABASE   MS_Description       AdventureWorks 2014 Sample OLTP Database 
AdventureWorks OBJECT_OR_COLUMN MS_Description       Check constraint [ProductLine]='r' OR [ProductLine]='m' OR [ProductLine]='t' OR [ProductLine]='s' OR [ProductLine]='R' OR [ProductLine]='M' OR [ProductLine]='T' OR [ProductLine]='S' OR [ProductLine] IS NULL 
AdventureWorks OBJECT_OR_COLUMN MS_Description       Stores (including store contacts) that sell Adventure Works Cycles products to consumers. 
AdventureWorks OBJECT_OR_COLUMN MS_Description       Manufacturing failure reasons lookup table. 
AdventureWorks OBJECT_OR_COLUMN MS_Description       Primary key for ScrapReason records. 
AdventureWorks OBJECT_OR_COLUMN MS_Description       Failure description. 
... 

如果print @sql,你會看到這樣的查詢:

USE [master] INSERT INTO #extprops SELECT 'master' as dbname, class_desc, [name], [value] FROM sys.extended_properties; 
USE [tempdb] INSERT INTO #extprops SELECT 'tempdb' as dbname, class_desc, [name], [value] FROM sys.extended_properties; 
USE [model] INSERT INTO #extprops SELECT 'model' as dbname, class_desc, [name], [value] FROM sys.extended_properties; 

之後,你可以在#extprops表使用任何過濾器。

+0

非常感謝你,這是非常有益的 – Motaz

相關問題