從SQL Server獲取數據庫列表

如何獲取SQL Server實例上的可用數據庫列表? 我打算在VB.NET的組合框中列出它們的列表。 數據庫


#1樓

執行: spa

SELECT name FROM master.sys.databases code

如今,這是首選方法,而不是已經棄用了一段時間的dbo.sysdatabasesserver


執行此查詢: 對象

SELECT name FROM master.dbo.sysdatabases

或者若是您願意 get

EXEC sp_databases

#2樓

要排除系統數據庫: 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

#3樓

SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'

不管是否啓用報告,這對兩種狀況都適用 file


#4樓

我使用下面的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();
}

#5樓

若是要省略系統數據庫和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 」系統存儲過程。 我只刪除不須要的列,並在其中添加條件。

相關文章
相關標籤/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。