如何获取SQL Server实例上的可用数据库列表?我打算在VB.NET的组合框中列出它们.
执行:
SELECT name FROM master.sys.databases
这是现在的首选方法,而不是dbo.sysdatabases
已经弃用了一段时间.
执行此查询:
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
编辑:2013年2月2日下午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
由于您使用的是.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 * from sys.databases
如果你只需要用户定义的数据库;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
一些系统数据库名称是(resource,distribution,reportservice,reportservicetempdb),只需将其插入查询即可.如果您的机器中有上述数据库作为默认值.
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(); }