it-swarm.com.de

Ruft eine Liste der Datenbanken von SQL Server ab

Wie kann ich die Liste der verfügbaren Datenbanken in einer SQL Server-Instanz abrufen? Ich plane, eine Liste von ihnen in einem Kombinationsfeld in VB.NET zu machen.

336
sef

Ausführen:

SELECT name FROM master.sys.databases

Dies ist jetzt der bevorzugte Ansatz anstelle von dbo.sysdatabases, der seit einiger Zeit veraltet ist.


Führen Sie diese Abfrage aus:

SELECT name FROM master.dbo.sysdatabases

oder wenn Sie es vorziehen

EXEC sp_databases
541
Ben Hoffstein

in Anbetracht der Unklarheit in Bezug auf die Anzahl der Nichtbenutzer-Datenbanken sollten Sie wahrscheinlich Folgendes hinzufügen:

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

und fügen Sie die Namen der Reporting Services-Datenbanken hinzu

81
GilShalit

So schließen Sie Systemdatenbanken aus:

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

Bearbeitet: 2:36 PM 05.02.2013

Aktualisiert mit genauer database_id. Es sollte größer als 4 sein, um die Auflistung von Systemdatenbanken zu überspringen, deren Datenbank-ID zwischen 1 und 4 liegt.

SELECT * 
FROM sys.databases d
WHERE d.database_id > 4
52
GilM
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 

Funktioniert auf unserem SQL Server 2008

27
Frank

Da Sie .NET verwenden, können Sie SQL Server Management Objects verwenden

Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
For Each db As Database In server.Databases
    Console.WriteLine(db.Name)
Next
22
Chris Diver

Lassen Sie sich nicht verwirren. Verwenden Sie die folgende einfache Abfrage, um alle Datenbanken abzurufen.

select * from sys.databases

Wenn Sie nur die benutzerdefinierten Datenbanken benötigen;

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

Einige der Systemdatenbanknamen (Ressource, Verteilung, Berichtsservice, Berichtsservicetempdb) fügen sie einfach in die Abfrage ein. Wenn Sie die oben genannten DBs in Ihrem Computer als Standard haben.

18
Balaji
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'

Dies funktioniert für beide Bedingungen, unabhängig davon, ob die Berichterstellung aktiviert ist oder nicht

7
ManiG

Ich verwende den folgenden SQL Server Management Objects Code, um eine Liste von Datenbanken abzurufen, die keine Systemdatenbanken und keine Snapshots sind.

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();
}
5
Rob Prouse

Wenn Sie Systemdatenbanken und ReportServer-Tabellen (falls installiert) weglassen möchten:

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

Dies funktioniert auf SQL Server 2008/2012/2014. Die meisten Abfragen stammen von der gespeicherten Systemprozedur "sp_databases". Ich entferne nur nicht benötigte Spalten und füge wo Bedingungen hinzu.

Ich bin mir nicht sicher, ob dadurch die Berichtsserver-Datenbanken ausgelassen werden, da ich keine ausführe. Nach dem, was ich gesehen habe, kann ich jedoch systembenutzereigene Datenbanken mit dieser SQL auslassen:

    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
watch_amajigger

In SQL Server 7 sind DBID 1 bis 4 die System-DBS.

1
JerryOL