2009-08-13 75 views

回答

2

我敢肯定有一个“好”的方式,但这个工程:

SELECT * FROM sys.databases 
where owner_sid != 1 
+0

对我的作品在SQL Server 2005 – Rajesh 2009-08-13 07:38:09

+0

这将显示所有数据库这里的主人是不是“山”的登录。所以,如果你的用户数据库的所有者是'sa',那么他们也将被排除在外。 – firedfly 2011-02-09 20:56:08

0

最简单的方法是

exec sp_databases 

但是,其中将包括系统数据库,所以你需要手动排除。不知道是否有一个不同的系统sproc会为你做。

虽然你可以使用

select * from sys.databases 

我敢肯定的owner_sid字段不是一个系统数据库的可靠指标,获得更多的扩展信息,因为我有两个系统,有些用户在相同的SID数据库在我的服务器上。

0
SELECT name, owner_sid 
FROM sys.databases 

owner_sid应该提供足够的信息来区分,但我发现我的Oslo_Repository希德也被指定为1 ,所以它可能不是100%可靠的。

2

您查询sys.databases并删除系统。真正的系统数据库是master,tempdb,model(即,db_id1,2和3)和mssqlsystemresource。然而mssqlsystemresource有一些魔术背后,似乎并不存在。另一方面大家可以将SQL引擎也认为是msdb也是一个系统数据库。所以查询将是这样的:

select * from sys.databases 
where name not in (N'master', N'tempdb', N'model', N'msdb') 
+0

btw还有其他的'ambiguos'数据库,比如replicaiton分发数据库,​​ReportServer和ResportServerTempDB。 – 2009-08-14 19:20:46

+0

+1我认为这是一个更好的解决方案。 – 2011-02-10 00:16:37

0
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 6 
相关问题