简体   繁体   English

在SQL Server中选择数据库名称和扩展属性

[英]Select Database names and extended properties in SQL Server

I have three databases, starting with "MD_" that I have added in SQL Server 2012. Each of them has an extended property NAME = "DESCRIPTION" 我有三个数据库,从我在SQL Server 2012中添加的“MD_”开始。每个数据库都有一个扩展属性NAME =“DESCRIPTION”

What I like to have returned is a result set of the database names and the "DESCRIPTION" value. 我想要返回的是数据库名称和“DESCRIPTION”值的结果集。

Selecting the database names are easy enough but I could use some help with joining in the extended property. 选择数据库名称很简单,但我可以使用一些帮助来加入扩展属性。

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

Results: 结果:

NAME   DESCRIPTION
MD_1   Initial
MD_2   Secondary
MD_3   Final

Any help would be greatly appreciated! 任何帮助将不胜感激! Kind regards 亲切的问候

The link in the comments helped me get here but sys.extended_properties is a per database view. 注释中的链接帮助我到达此处,但sys.extended_properties是每个数据库视图。 So the properties for each database are contained in the database. 因此,每个数据库的属性都包含在数据库中。 This worked though. 这虽然有效。

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'

And if you want all the databases and just properties where they exist. 如果你想要所有数据库,只需要存在它们的属性。

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

Here is another option, does not use temporary table but returns multiple results... 这是另一个选项,不使用临时表但返回多个结果...

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM