Get lijst met databases van SQL Server

Hoe kan ik de lijst met beschikbare databases op een SQL Server-instantie ontvangen? Ik ben van plan een lijst van hen in een combo-box in vb.net te maken.


1, Autoriteit 100%

Uitvoeren:

SELECT name FROM master.sys.databases

Dit de voorkeursbenadering nu, in plaats van dbo.sysdatabases, die al enige tijd is verouderd.


Voer deze query uit:

SELECT name FROM master.dbo.sysdatabases

of als u verkiest

EXEC sp_databases

2, Autoriteit 13%

In het licht van de ambiguïteit met betrekking tot het aantal niet-gebruikersdatabases, moet u waarschijnlijk toevoegen:

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

en voeg de namen toe van de rapportagedienstendatabases


3, Autoriteit 8%

Om systeemdatabases uit te sluiten:

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

Bewerkt: 2:36 PM 2/5/2013

Bijgewerkt met nauwkeurige database_id, het moet groter zijn dan 4, om de vermelding over te slaan
Systeemdatabases die database-ID hebben tussen 1 en 4.

SELECT * 
FROM sys.databases d
WHERE d.database_id > 4

4, Autoriteit 4%

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

Werkt op onze SQL Server 2008


5, Autoriteit 4%

Gebruik niet in de war, gebruik de onderstaande eenvoudige query om alle databases te krijgen,

select * from sys.databases

Als u alleen de door de gebruiker gedefinieerde databases nodig hebt;

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

Enkele van de systeemdatabase-namen zijn (resource, distributie, rapportenervice, reportservicetempdb) Steek het gewoon in de query.
Als u de bovenstaande DB’s in uw machine als standaard hebt.


6, Autoriteit 3%

Aangezien u .NET gebruikt, kunt u de SQL Server Management-objecten

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

7

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

Hiermee werkt u voor zowel voorwaarde, of de rapportage is ingeschakeld of niet


8

Ik gebruik de volgende SQL Server Management Objects code om een ​​te krijgen Lijst met databases die geen systeemdatabases zijn en zijn geen momentopnamen.

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

9

Als u Systeemdatabases en ReportServer-tabellen (indien geïnstalleerd) wilt laten weglaten

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;

Dit werkt op SQL Server 2008/2012/2014. De meeste query komt van “sp_databases ” systeem opgeslagen procedure. Ik heb alleen een onnodige kolom verwijderd en toegevoegd waar de omstandigheden.


10

Niet zeker of dit de databases Report Server weglaat, aangezien ik er geen uitloop, maar van wat ik heb gezien, kan ik de databases van het systeem gebruiken met deze 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]

11

Misschien ben ik een dodo!

show databases;werkte voor mij.


12

In SQL Server 7, DBID 1 THRU 4 zijn het systeem DBS.


13

Om systeemdatabases uit te sluiten:

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

Other episodes