477 Stimmen

Liste der Datenbanken von SQL Server abrufen

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

23voto

Chris Diver Punkte 18942

Da Sie .NET verwenden, können Sie die SQL Server-Verwaltungsobjekte

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

8voto

ManiG Punkte 83
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'

Dies gilt für beide Bedingungen, unabhängig davon, ob die Berichterstattung aktiviert ist oder nicht.

6voto

Rob Prouse Punkte 21205

Ich verwende die folgenden SQL Server-Verwaltungsobjekte Code, um eine Liste von Datenbanken zu erhalten, 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();
}

6voto

Wenn Sie die Systemdatenbanken und ReportServer-Tabellen (falls installiert) auslassen wollen

select DATABASE_NAME = db_name(s_mf.database_id)
from sys.master_files s_mf
where
    s_mf.state = 0 -- ONLINE
    and 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 mit SQL Server 2008/2012/2014. Die meisten Abfragen kommen von " sp_databases System Stored Procedure". Ich habe nur eine nicht benötigte Spalte entfernt und Where-Bedingungen hinzugefügt.

2voto

watch_amajigger Punkte 21

Ich bin mir nicht sicher, ob dadurch die Datenbanken des Berichtsservers ausgelassen werden, da ich keinen verwende, aber nach dem, was ich gesehen habe, kann ich mit diesem SQL die Datenbanken auslassen, die dem Systembenutzer gehören:

    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]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X