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