如何获取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 ”系统存储过程。 我只删除不需要的列,并在其中添加条件。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3187715