Odpowiedzi:
Wykonać:
SELECT name FROM master.sys.databases
To preferowane podejście jest teraz raczej dbo.sysdatabases
przestarzałe.
Wykonaj to zapytanie:
SELECT name FROM master.dbo.sysdatabases
lub jeśli wolisz
EXEC sp_databases
exec sp_databases
nie działał. Pozostałe dwa ( master.dbo.sysdatabases
i sys.databases
) nadal działają.
Aby wykluczyć systemowe bazy danych:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
Zmieniano: 14:36 2/5/2013
Zaktualizowany o dokładny id_bazy_danych, powinien być większy niż 4, aby pominąć wyświetlanie baz systemowych, które mają identyfikator bazy danych od 1 do 4.
SELECT *
FROM sys.databases d
WHERE d.database_id > 4
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
Działa na naszym SQL Server 2008
ID
5 i 6 będą ReportServer
i ReportServerTempDB
jeśli masz SQL Server Reporting Services
zainstalowane.
Ponieważ używasz platformy .NET, możesz używać obiektów zarządzania 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();
Nie myl się, użyj poniższego prostego zapytania, aby uzyskać wszystkie bazy danych,
select * from sys.databases
Jeśli potrzebujesz tylko baz danych zdefiniowanych przez użytkownika;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
Niektóre z nazw Systemowej bazy danych to (zasób, dystrybucja, usługa raportów, usługa raportów), wystarczy wstawić ją do zapytania. Jeśli masz powyższe bazy danych na swoim komputerze jako domyślne.
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
Będzie to działać w obu przypadkach, niezależnie od tego, czy raportowanie jest włączone, czy nie
Korzystam z następującego kodu SQL Server Management Objects, aby uzyskać listę baz danych, które nie są bazami systemowymi i nie są migawkami.
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();
lub foreach (var Db in new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases)
jak w .NET 4.0 + SQL Server 2014 lub .SqlServer.Smo \ 12.0.0.0
Jeśli chcesz pominąć systemowe bazy danych i tabele ReportServer (jeśli są zainstalowane):
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
Działa to na Sql Server 2008/2012/2014. Większość zapytań pochodzi z procedury przechowywanej w systemie „ sp_databases ”. Usuwam tylko niepotrzebną kolumnę i dodałem gdzie warunki.
Nie jestem pewien, czy to pominie bazy danych serwera raportów, ponieważ nie działam, ale z tego, co widziałem, mogę pominąć bazy danych użytkowników systemu za pomocą tego kodu 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]
może jestem dodo!
show databases;
pracował dla mnie.
Możesz znaleźć wszystkie nazwy baz danych za pomocą: -
select name from sys.sysdatabases
Aby wykluczyć systemowe bazy danych:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
sid
kolumny na sys.databases
stoleowner_sid