从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 ”系统存储过程。 我只删除不须要的列,并在其中添加条件。

相关文章
相关标签/搜索