如何獲取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 」系統存儲過程。 我只刪除不須要的列,並在其中添加條件。