如何获取SQL Server实例上的可用数据库列表? 我打算在VB.NET的组合框中列出它们的列表。 数据库
执行: spa
SELECT name FROM master.sys.databases
code
如今,这是首选方法,而不是已经弃用了一段时间的dbo.sysdatabases
。 server
执行此查询: 对象
SELECT name FROM master.dbo.sysdatabases
或者若是您愿意 get
EXEC sp_databases
要排除系统数据库: string
SELECT [name] FROM master.dbo.sysdatabases WHERE dbid > 6
编辑时间:2013年2月5日2:36 PM io
已使用精确的database_id更新,应大于4,以跳过列出数据库ID在1到4之间的系统数据库。 ast
SELECT * FROM sys.databases d WHERE d.database_id > 4
SELECT [name] FROM master.dbo.sysdatabases WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
不管是否启用报告,这对两种状况都适用 file
我使用下面的SQL Server管理对象代码来获取不是系统数据库也不是快照的数据库列表。
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(); }
若是要省略系统数据库和ReportServer表(若是已安装):
select DATABASE_NAME = db_name(s_mf.database_id) from sys.master_files s_mf where s_mf.state = 0 and -- ONLINE 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 ”系统存储过程。 我只删除不须要的列,并在其中添加条件。