从SQL Server获取数据库列表

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

1012257 次浏览

执行:

SELECT name FROM master.sys.databases

这是目前首选的方法,而不是dbo.sysdatabases,后者已经被弃用了一段时间。


执行这个查询:

SELECT name FROM master.dbo.sysdatabases

或者如果你愿意

EXEC sp_databases

排除系统数据库:

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

编辑:2013年2月5日下午2:36

更新准确的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

鉴于非用户数据库数量的不确定性,您可能应该补充:

WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');

并添加报表服务数据库的名称

在SQL Server 7中,dbid 1 ~ dbid 4为系统dbs。

因为你使用的是。net,所以你可以使用SQL Server管理对象

Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
For Each db As Database In server.Databases
Console.WriteLine(db.Name)
Next
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'

这将工作的两个条件,报告是否启用

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

如果要省略系统数据库和ReportServer表(如果已安装)

select DATABASE_NAME = db_name(s_mf.database_id)
from sys.master_files s_mf
where
s_mf.state = 0 -- ONLINE
and 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"系统存储过程。我只是删除了不需要的列,并添加了where条件。

使用下面的查询来获取所有的数据库:

select * from sys.databases

如果您只需要用户定义的数据库;

select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');

一些系统数据库名称是(resource,distribution,reportservice,reportservicetempdb),如果您的机器中默认有上述数据库,只需将其插入到查询中。

不确定这是否会忽略报表服务器数据库,因为我没有运行一个,但从我所看到的,我可以用这个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]

也许我是一只渡渡鸟!

show databases;对我有用。

排除系统数据库:

SELECT name FROM master.dbo.sysdatabases where sid <>0x01

如果你正在寻找在MYSQL中列出数据库的命令,那么只需使用下面的命令。登录sql server后,

< >强显示数据库;< / >强