如何獲取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