【问题标题】:Select Database names and extended properties in SQL Server在 SQL Server 中选择数据库名称和扩展属性
【发布时间】:2013-02-09 02:11:19
【问题描述】:

我有三个数据库,从我在 SQL Server 2012 中添加的“MD_”开始。 他们每个人都有一个扩展属性 NAME = "DESCRIPTION"

我希望返回的是数据库名称和“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

任何帮助将不胜感激! 亲切的问候

【问题讨论】:

标签: sql sql-server extended-properties


【解决方案1】:

cmets 中的链接帮助我到达这里,但 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

【讨论】:

  • 让我先尝试按照您的逻辑,因为我有一段时间没有使用 SQL Server。首先,您要创建一个临时表?然后用每个数据库中的所有扩展属性填充它? (顺便说一句,我在这里遇到一个错误,说“sp_msforeachdb 附近的语法不正确”)@Kenneth Fisher
  • @Hank,抱歉语法不正确。我没有把EXEC放在sp_msforeachdb前面。我什至最近在博客上写过它,但仍然忘记了。那好吧。另一方面,是的,我正在创建一个临时表,然后 sp_msforeachdb 循环遍历每个数据库,并且我正在以这种方式填充临时表。 sp_msforeachdb 替换 ?与数据库名称。然后,一旦我填充了临时表,就很容易查询 sys.databases。
【解决方案2】:

这里还有一个选项,不使用临时表而是返回多个结果...

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

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多