2013-02-23 33 views
3

我有三個數據庫,開始與我在SQL Server中添加「MD_」 2012年 他們每個人都有一個擴展屬性NAME =「描述」選擇數據庫名和擴展屬性

我喜歡返回的是數據庫名稱和「DESCRIPTION」值的結果集。

選擇數據庫名稱很簡單,但我可以使用一些幫助來加入擴展屬性。

BEGIN 
    SELECT A.NAME 
    FROM sys.databases A 
    Where LEFT(A.NAME, 3) = 'MD_' 
END 

結果:

NAME DESCRIPTION 
MD_1 Initial 
MD_2 Secondary 
MD_3 Final 

任何幫助將不勝感激! 親切的問候

+0

考慮:http://msdn.microsoft.com/en-us/library/ms186989( v = sql.90).aspx或類似的堆棧問題http://stackoverflow.com/questions/6714848/select-extended-property-from-sql-server-tables – xQbert 2013-02-23 14:37:03

回答

7

評論中的鏈接幫助我到達這裏,但sys.extended_properties是每個數據庫視圖。所以每個數據庫的屬性都包含在數據庫中。這雖然工作。

CREATE TABLE #EP (DatabaseName varchar(255), PropertyName varchar(max), 
      PropertyValue varchar(max)) 

EXEC sp_msforeachdb 'INSERT INTO #EP SELECT ''?'' AS DatabaseName, 
      CAST(name AS varchar), CAST(Value AS varchar) 
     FROM [?].sys.extended_properties WHERE class=0' 

而且如果你想要所有的數據庫和它們存在的屬性。

SELECT db.Name, #EP.PropertyName, #EP.PropertyValue 
FROM sys.databases db 
LEFT OUTER JOIN #EP 
    ON db.name = #EP.DatabaseName 
+0

讓我試着按照你的邏輯在第一位,因爲我有一段時間沒有使用SQL Server。首先你要創建一個臨時表?然後用每個數據庫的所有extended_properties填充它? (我在這裏得到一個錯誤btw說「靠近sp_msforeachdb不正確的語法」)@Kenneth Fisher – Hank 2013-02-24 00:12:45

+0

@Hank,對不正確的語法抱歉。我沒有把EXEC放在sp_msforeachdb之前。我甚至最近在博客上寫了這篇文章,但仍然忘了。好吧。另一方面,是的,我正在創建一個臨時表,然後sp_msforeachdb循環遍歷每個數據庫,並以此方式填充臨時表。 sp_msforeachdb替換?與數據庫名稱。然後,一旦我有臨時表填充它很容易查詢sys.databases。 – 2013-02-24 06:53:50

3

這裏是另一種選擇,不使用臨時表,但返回多個結果...

EXEC sp_msforeachdb N'SELECT name, value 
FROM [?].sys.fn_listextendedproperty(default, default, default, default, default, default, default)'