2008-09-29 160 views

回答

397

執行這個查詢:

SELECT name FROM master.dbo.sysdatabases 

或者如果你喜歡

EXEC sp_databases 
+5

@Gia它確實存在作爲一個向後compatablity視圖。 http://msdn.microsoft.com/en-us/library/ms179900%28v=SQL.110%29.aspx – 2011-08-07 22:26:04

+4

EXEC sp_databases是_slow_爲我執行;具有36個數據庫的實例需要40秒。從sysdatabases中選擇是即時的。 – MarcE 2013-01-28 14:19:07

+6

要擴展@ChrisDiver所說的內容:SELECT name FROM sys.databases是現在的首選方法,而不是dbo.sysdatabases,現在已經廢棄了十年。 – Micah 2016-02-03 19:36:38

46

要排除系統數據庫:

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 
+7

這不起作用。也許你的意思是> 4?表5和6是用戶表。 – 2011-08-24 19:58:37

+1

它看起來應該總是> 4,儘管我正在檢查的服務器在5和6位置有「ReportServer」和「ReportServerTempDB」。 – Trisped 2014-12-26 19:14:02

+0

對我來說> 6會做。 – 2015-12-20 07:27:56

22
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 

作品我們的SQL Server 2008中

上之間的數據庫ID 系統數據庫
10

如果您安裝了SQL Server Reporting Services,則ID爲5和6的系統數據庫將爲ReportServer和ReportServerTempDB。

+0

僅當您(使用SQL安裝程序愚蠢且安裝了Reporting Services(而不是稍後不接受默認設置並使用管理器進行配置))或(使用預配置的INF文件安裝並運行的SQL服務器) – 2013-10-04 14:42:05

68

的模糊性非用戶數據庫的數量來看,很可能需要添加:

WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); 

,並添加報告服務數據庫的名稱

2

在SQL Server 7,DBID 1到4是系統dbs。

-1

在SQL Server 2008 R2這個工程:

select name 
from master.sys.databases 
where owner_sid > 1; 

而僅列出數據庫用戶(一個或多個)創建的。

+0

嘗試`owner_sid <> 1` – wqw 2012-09-21 13:13:52

+7

編輯:這是錯的! `owner_sid = 1`意味着`sa`所有者,沒什麼特別的。 – wqw 2012-09-21 13:25:48

19

由於您使用.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
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB' 

這兩個條件下工作,無論報告已啓用或不

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(); 
} 
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上。大多數查詢來自「sp_databases」系統存儲過程。我只刪除不需要的列,並添加了條件。

10

不要誤會,使用下面簡單的查詢來獲取所有的數據庫,

select * from sys.databases 

如果妳只需要在用戶定義的數據庫;

select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); 

一些系統數據庫名稱(資源,分佈,ReportService的,reportservicetempdb)只是將其插入查詢。 如果你的機器中有上面的db作爲默認值。

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] 
-1

你可以找到所有數據庫名稱與此: -

select name from sys.sysdatabases 
2

也許我是一個渡渡鳥!

show databases;爲我工作。

-1

要排除系統數據庫:

SELECT name FROM master.dbo.sysdatabases where sid <>0x01 
0

可以使用。

select Name from sys.Databases 

它列出了所有存在的數據庫。

在最新版本中測試至今(SQL Server 2017)。