从SQL Server获取数据库列表
如何获得SQL Server实例上可用数据库的列表? 我打算在VB.NET的combobox中列出它们。
执行这个查询:
SELECT name FROM master.dbo.sysdatabases
或者如果你喜欢
EXEC sp_databases
鉴于非用户数据库数量的模糊性,您应该添加:
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
并添加报告服务数据库的名称
要排除系统数据库:
SELECT [name] FROM master.dbo.sysdatabases WHERE dbid > 6
编辑:下午2:36 2/5/2013
用精确的database_id更新,应该大于4,以略过列出数据库ID在1到4之间的系统数据库。
SELECT * FROM sys.databases d WHERE d.database_id > 4
SELECT [name] FROM master.dbo.sysdatabases WHERE dbid > 4
适用于我们的SQL Server 2008
由于您正在使用.NET,因此您可以使用SQL Serverpipe理对象
Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost") For Each db As Database In server.Databases Console.WriteLine(db.Name) Next
如果您安装了SQL Server Reporting Services,则ID为5和6的系统数据库将为ReportServer和ReportServerTempDB。
不要混淆,使用下面的简单查询来获取所有的数据库,
select * from sys.databases
如果你只需要用户定义的数据库;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
一些系统数据库名称是(资源,分发,reportservice,reportservicetempdb)只是插入到查询中。 如果你有默认的机器上面的数据库。
SELECT [name] FROM master.dbo.sysdatabases WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
这将适用于条件,是否启用报告
我使用以下SQL Serverpipe理对象代码来获取不是系统数据库而不是快照的数据库列表。
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(); }
在SQL Server 7中,dbid 1到4是系统dbs。
也许我是个傻瓜!
show databases;
为我工作。
如果您想省略系统数据库和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 ”系统存储过程。 我只删除不需要的列,并添加条件。
不知道这是否会省略报表服务器数据库,因为我没有运行一个,但从我所看到的,我可以用这个SQL省略系统用户拥有的数据库:
SELECT db.[name] as dbname FROM [master].[sys].[databases] db LEFT OUTER JOIN [master].[sys].[sysusers] su on su.sid = db.owner_sid WHERE su.sid is null order by db.[name]
在SQL Server 2008 R2中,这起作用:
select name from master.sys.databases where owner_sid > 1;
并仅列出由用户创build的数据库。
你可以find所有的数据库名称:
select name from sys.sysdatabases
要排除系统数据库:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01