首页 > 解决方案 > 枚举 Azure SQL Server 中的数据库列表

问题描述

我们标记具有扩展属性的数据库,以识别与我们的软件兼容的数据库。我们向用户提供要连接的兼容数据库列表。

迄今为止,我们已在本地 SQL Express 实例上使用 sp_databases 来执行此操作。我们在查询 sys.databases 时使用了这个存储过程,因为我们知道我们的用户出于某种原因会删除 MDF/LDF 文件。根据我们的经验,如果数据库的基础 MDF/LDF 文件已被删除, sp_databases 将不会返回数据库。

据我所知,Azure SQL Server 不支持 sp_databases。我尝试将代码更改为查询 sys.databases,因为我们不必担心用户在 Azure 环境中删除 MDF/LDF 文件,但是,当从 .Net 应用程序运行时,它总是返回一个空的结果集。

在 Azure SQL Server 上查询数据库集的正确方法是什么,以便我们可以根据扩展属性值过滤掉数据库?是否需要授予执行查询的用户额外的东西?

标签: azureazure-sql-database

解决方案


您可以使用 SQL Server 管理对象 (SMO)。以下是从 PowerShell 使用 SMO 的示例。

Function Get-Databases {
    Param(
    [string]$location
    , [string]$server
    , [string]$smolibrary
    , [string]$daclibrary
    , [string]$username
    , [string]$password
    )
    Process
    {
        $dt = Get-Date -uFormat "%Y%m%d"

        Add-Type -Path $smolibrary
        $scon = "Data Source=$server.database.windows.net;Initial Catalog=master;User ID=$username;Password=$password;"
        $servercon = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
        $servercon.ConnectionString = $scon
        $srv = New-Object Microsoft.SqlServer.Management.SMO.Server($servercon)

        foreach ($db in $srv.Databases | Where-Object {$_.Name -ne "master"})
        {
            $database = $db.Name
            ###  Print or save $database
        }
    }
}

推荐阅读