如何获取SQL Server实例上的可用数据库列表?我打算在VB.NET的组合框中列出它们。
答案 0 :(得分:524)
执行:
SELECT name FROM master.sys.databases
这是现在的首选方法,而不是dbo.sysdatabases
,已被弃用了一段时间。
执行此查询:
SELECT name FROM master.dbo.sysdatabases
或者如果您愿意
EXEC sp_databases
答案 1 :(得分:77)
鉴于非用户数据库数量的模糊性,您应该添加:
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
并添加报告服务数据库的名称
答案 2 :(得分:48)
排除系统数据库:
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
答案 3 :(得分:26)
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
适用于我们的SQL Server 2008
答案 4 :(得分:20)
由于您使用的是.NET,因此可以使用SQL Server Management Objects
Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
For Each db As Database In server.Databases
Console.WriteLine(db.Name)
Next
答案 5 :(得分:15)
不要混淆,使用以下简单查询来获取所有数据库,
select * from sys.databases
如果您只需要用户定义的数据库;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
一些系统数据库名称是(resource,distribution,reportservice,reportservicetempdb),只需将其插入查询即可。 如果你的机器中有上述数据库作为默认值。
答案 6 :(得分:5)
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
这适用于两种情况,是否启用报告
答案 7 :(得分:3)
我使用以下SQL Server Management Objects代码获取不是系统数据库且不是快照的数据库列表。
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();
}
答案 8 :(得分:1)
在SQL Server 7中,dbid 1到4是系统dbs。
答案 9 :(得分:1)
如果要省略系统数据库和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。大多数查询来自&#34; sp_databases &#34;系统存储过程。我只删除不需要的列并添加条件。
答案 10 :(得分:1)
不确定这是否会省略报表服务器数据库,因为我没有运行,但是从我看到的情况来看,我可以用这个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]
答案 11 :(得分:-3)
也许我是渡渡鸟!
EPH
为我工作。
答案 12 :(得分:-4)
在SQL Server 2008 R2中,这可以工作:
select name
from master.sys.databases
where owner_sid > 1;
仅列出用户创建的数据库。
答案 13 :(得分:-4)
排除系统数据库:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
答案 14 :(得分:-5)
您可以使用以下命令查找所有数据库名称: -
select name from sys.sysdatabases