如何获取SQL Server实例上的可用数据库列表?我计划在VB.NET的组合框中列出他们的列表。


当前回答

我使用下面的SQL Server Management Objects代码来获得一个数据库列表,这些数据库既不是系统数据库,也不是快照。

using Microsoft.SqlServer.Management.Smo;

public static string[] GetDatabaseNames( string serverName )
{
   var server = new Server( serverName );
   return ( from Database database in server.Databases 
            where !database.IsSystemObject && !database.IsDatabaseSnapshot
            select database.Name 
          ).ToArray();
}

其他回答

使用下面的查询来获取所有的数据库:

select * from sys.databases

如果您只需要用户定义的数据库;

select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); 

一些系统数据库名称是(resource,distribution,reportservice,reportservicetempdb),如果您的机器中默认有上述数据库,只需将其插入到查询中。

SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 

工作在我们的SQL Server 2008

鉴于非用户数据库数量的不确定性,您可能应该补充:

WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');

并添加报表服务数据库的名称

不确定这是否会忽略报表服务器数据库,因为我没有运行一个,但从我所看到的,我可以用这个SQL忽略系统用户拥有的数据库:

    SELECT  db.[name] as dbname 
    FROM [master].[sys].[databases] db
    LEFT OUTER JOIN  [master].[sys].[sysusers] su on su.sid = db.owner_sid
    WHERE su.sid is null
    order by db.[name]

我使用下面的SQL Server Management Objects代码来获得一个数据库列表,这些数据库既不是系统数据库,也不是快照。

using Microsoft.SqlServer.Management.Smo;

public static string[] GetDatabaseNames( string serverName )
{
   var server = new Server( serverName );
   return ( from Database database in server.Databases 
            where !database.IsSystemObject && !database.IsDatabaseSnapshot
            select database.Name 
          ).ToArray();
}