Answers:
执行:
SELECT name FROM master.sys.databases
现在,这是首选方法,而不是dbo.sysdatabases
已被淘汰了一段时间的。
执行此查询:
SELECT name FROM master.dbo.sysdatabases
或者如果您愿意
EXEC sp_databases
exec sp_databases
不起作用。其他两个(master.dbo.sysdatabases
和sys.databases
)仍然有效。
要排除系统数据库:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
编辑时间:2013年2月5日2:36 PM
已使用精确的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
ID
5和6 。ReportServer
ReportServerTempDB
SQL Server Reporting Services
由于使用的是.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
var SDBLOC = new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases.Cast<Microsoft.SqlServer.Management.Smo.Database>().Where(bs => !bs.IsSystemObject && bs.ID>6).ToList();
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();
}
var DBsLOC = new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases.Cast<Microsoft.SqlServer.Management.Smo.Database>().Where(bs => !bs.IsSystemObject && bs.ID>6).ToList();
或 foreach (var Db in new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases)
如.NET 4.0 + SQL Server 2014或.SqlServer.Smo \ 12.0.0.0
如果要省略系统数据库和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]
也许我是渡渡鸟!
show databases;
为我工作。
要排除系统数据库:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
sid
栏sys.databases
owner_sid