从SQL Server获取数据库列表

半腔热情 提交于 2020-03-04 10:30:09

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


#1楼

执行:

SELECT name FROM master.sys.databases

现在,这是首选方法,而不是已经弃用了一段时间的dbo.sysdatabases


执行此查询:

SELECT name FROM master.dbo.sysdatabases

或者如果您愿意

EXEC sp_databases

#2楼

要排除系统数据库:

SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6

编辑时间:2013年2月5日2:36 PM

已使用精确的database_id更新,应大于4,以跳过列出数据库ID在1到4之间的系统数据库。

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'

无论是否启用报告,这对两种情况都适用


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!