如何获取SQL Server实例上可用数据库的列表?我打算在VB.NET的组合框中列出它们。从SQL Server获取数据库列表
回答
执行这个查询:
SELECT name FROM master.dbo.sysdatabases
或者如果你喜欢
EXEC sp_databases
要排除系统数据库:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
编辑:下午2:36 2/5/2013
准确database_id的更新,它应该比4更大,跳过上市,其是具有1和4
SELECT *
FROM sys.databases d
WHERE d.database_id > 4
这不起作用。也许你的意思是> 4?表5和6是用户表。 – 2011-08-24 19:58:37
它看起来应该总是> 4,尽管我正在检查的服务器在5和6位置有“ReportServer”和“ReportServerTempDB”。 – Trisped 2014-12-26 19:14:02
对我来说> 6会做。 – 2015-12-20 07:27:56
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
作品我们的SQL Server 2008中
上之间的数据库ID 系统数据库如果您安装了SQL Server Reporting Services,则ID为5和6的系统数据库将为ReportServer和ReportServerTempDB。
仅当您(使用SQL安装程序愚蠢且安装了Reporting Services(而不是稍后不接受默认设置并使用管理器进行配置))或(使用预配置的INF文件安装并运行的SQL服务器) – 2013-10-04 14:42:05
的模糊性非用户数据库的数量来看,很可能需要添加:
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
,并添加报告服务数据库的名称
在SQL Server 7,DBID 1到4是系统dbs。
由于您使用.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
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
这两个条件下工作,无论报告已启用或不
我用下面的代码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();
}
如果你想(如果已安装)省略系统数据库和表的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”系统存储过程。我只删除不需要的列,并添加了条件。
不要误会,使用下面简单的查询来获取所有的数据库,
select * from sys.databases
如果妳只需要在用户定义的数据库;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
一些系统数据库名称(资源,分布,ReportService的,reportservicetempdb)只是将其插入查询。 如果你的机器中有上面的db作为默认值。
不知道,因为我没有运行一个,但是从我所看到的,这将省去报表服务器数据库,我可以省略系统用户所拥有的数据库具有以下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]
你可以找到所有数据库名称与此: -
select name from sys.sysdatabases
也许我是一个渡渡鸟!
show databases;
为我工作。
要排除系统数据库:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
可以使用。
select Name from sys.Databases
它列出了所有存在的数据库。
在最新版本中测试至今(SQL Server 2017)。
- 1. 从SQL Server数据库获取数据
- 2. 从数据库获取表和列 - SQL Server
- 3. 从SQL Server获取数据库用户及其权限列表
- 4. 获取数据库表中计算列的列表(SQL Server)
- 5. 从SQL Server数据库获取信息
- 6. 从数据库获取表的列表
- 7. 从SQL Server数据库获取数据到标签中
- 8. 从Datagrid获取数据返回到SQL Server数据库
- 9. 从SQL Server数据库中获取数据集
- 10. 从SQL Server获取数据到MS Access数据库
- 11. 从SQL Server Compact数据库获取实时数据
- 12. 如何从SQL Server数据库获取nvarchar数据
- 13. 如何从SQL Server数据库获取已修改记录的列表?
- 14. 从SQL Server 2012数据库获取.sql文件
- 15. 从数据库获取对象列表
- 16. 无法读取从SQL Server数据库
- 17. PHP - 从sql数据库获取数据
- 18. sql从SQL Server数据库表中取出记录部分
- 19. Excel没有从SQL Server获取数据
- 20. VBA从SQL Server获取数据
- 21. 从sql server中动态获取数据
- 22. 从SQL Server获取新数据
- 23. 数据从SQL Server获取在VBA
- 24. 使用ADO.NET从SQL Server获取数据
- 25. 从Sql Server 2008获取数据与C#
- 26. 从SQL Server Express数据库读表
- 27. 如何获取SQL SERVER数据库中所有表的行数
- 28. 我从数据库SQL从数据库中获取数据
- 29. 从SQL Server数据库C#
- 30. 从SQL Server数据库
@Gia它确实存在作为一个向后compatablity视图。 http://msdn.microsoft.com/en-us/library/ms179900%28v=SQL.110%29.aspx – 2011-08-07 22:26:04
EXEC sp_databases是_slow_为我执行;具有36个数据库的实例需要40秒。从sysdatabases中选择是即时的。 – MarcE 2013-01-28 14:19:07
要扩展@ChrisDiver所说的内容:SELECT name FROM sys.databases是现在的首选方法,而不是dbo.sysdatabases,现在已经废弃了十年。 – Micah 2016-02-03 19:36:38