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


当前回答

因为你正在使用。net,你可以使用SQL Server管理对象

Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
For Each db As Database In server.Databases
    Console.WriteLine(db.Name)
Next

其他回答

因为你正在使用。net,你可以使用SQL Server管理对象

Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
For Each db As Database In server.Databases
    Console.WriteLine(db.Name)
Next

排除系统数据库:

SELECT name FROM master.dbo.sysdatabases where sid <>0x01

如果要省略系统数据库和ReportServer表(如果已安装)

select DATABASE_NAME = db_name(s_mf.database_id)
from sys.master_files s_mf
where
    s_mf.state = 0 -- ONLINE
    and has_dbaccess(db_name(s_mf.database_id)) = 1
    and db_name(s_mf.database_id) NOT IN ('master', 'tempdb', 'model', 'msdb')
    and db_name(s_mf.database_id) not like 'ReportServer%'
group by s_mf.database_id
order by 1;

这适用于SQL Server 2008/2012/2014。大部分查询来自“sp_databases”系统存储过程。我只是删除了不需要的列,并添加了where条件。

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

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

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

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

select * from sys.databases

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

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

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