Comment puis-je obtenir la liste des bases de données disponibles sur une instance SQL Server? Je prévois de faire une liste d'entre eux dans une zone de liste déroulante dans VB.NET.Obtenir la liste des bases de données à partir de SQL Server
Répondre
Exécuter cette requête:
SELECT name FROM master.dbo.sysdatabases
ou si vous préférez
EXEC sp_databases
Pour exclure les bases de données du système:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
Modifié: 14h36 2/5/2013
Mise à jour avec database_id précis, il devrait être supérieur à 4, pour sauter la liste des bases de données système qui ont des id de base de données entre 1 et 4.
SELECT *
FROM sys.databases d
WHERE d.database_id > 4
Cela ne fonctionne pas. Peut-être que vous vouliez dire> 4? Les tableaux 5 et 6 sont des tableaux d'utilisateurs. –
On dirait qu'il devrait toujours être> 4, bien que le serveur que je vérifie a "ReportServer" et "ReportServerTempDB" dans les positions 5 et 6. – Trisped
pour moi> 6 le feraient. –
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
Works sur notre SQL Server 2008
Les bases de données système avec ID 5 et 6 seront ReportServer et ReportServerTempDB si SQL Server Reporting Services est installé.
Seulement si vous étiez (stupide ET installé Reporting Services utilisant le programme d'installation SQL (plutôt que de ne pas accepter les valeurs par défaut et de configurer ultérieurement le gestionnaire)) OU (serveur SQL génial ET installé utilisant un fichier INF préconfiguré) –
à la lumière de l'ambiguïté quant au nombre de bases de données non-utilisateurs, vous devriez probablement ajouter:
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
et ajoutez les noms des bases de données des services de reporting
Dans SQL Server 7, dbid 1 à 4 sont les dbs du système.
Dans SQL Server 2008 R2 ceci fonctionne:
select name
from master.sys.databases
where owner_sid > 1;
et la liste des bases de données créées uniquement par l'utilisateur (s).
Puisque vous utilisez .NET, vous pouvez utiliser le SQL Server Management Objects
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 = nouveau Microsoft.SqlServer.Management.Smo.Server (" localhost "). Databases.Cast
Je doute, il (localhost), est lu à partir d'un fichier de configuration. Je ne pouvais pas le faire fonctionner avec mon "myhost" (qui est mon nom d'hôte correct, disons obtenu par Environment.MachineName). Est-ce que ce travail fonctionnera si je remplace "localhost" par "myhost"? –
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
Cela fonctionne à la fois la condition, que ce soit des rapports est activée ou non
Attention, si votre serveur est une instance nommée, les noms de base de données ReportServer sont similaires à ReportServer $ InstanceName et ReportServer $ InstanceNameTempDB. Donc, ceci fonctionnerait de toute façon: SELECT [nom] FROM master.dbo.Sysdatabases OÙ dbid> 4 et [nom] NOT LIKE '% ReportServer' – ToddK
J'utilise le code suivant pour obtenir SQL Server Management Objects une liste de bases de données qui ne sont pas des bases de données système et ne sont pas des instantanés.
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();
}
un oneliner. 'var DBsLOC = new Microsoft.SqlServer.Management.Smo.Server ("localhost") Databases.Cast
Si vous souhaitez omettre les bases de données du système et des tables de ReportServer (le cas échéant):
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
Cela fonctionne sur Sql Server 2008/2012/2014. La plupart des requêtes proviennent de la procédure stockée système "sp_databases". Je supprime seulement la colonne inutile et ajouté où les conditions.
Ne pas confondre, utilisez la requête ci-dessous simple pour obtenir toutes les bases de données,
select * from sys.databases
Si u besoin que les bases de données définies par l'utilisateur;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
Certains des noms de base de données système sont (ressources, la distribution, ReportService, reportservicetempdb) Il suffit d'insérer dans la requête. Si vous avez les db ci-dessus dans votre machine par défaut.
Je ne sais pas si cela omettre les bases de données du serveur de rapports depuis que je ne suis pas en cours d'exécution d'un, mais de ce que je l'ai vu, je peux omettre les bases de données appartenant à des utilisateurs du système avec ce 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]
Vous pouvez trouver toutes les noms de bases de données avec ceci: -
select name from sys.sysdatabases
N'ajoute rien sur les réponses publiées des années plus tôt –
peut-être que je suis un dodo!
show databases;
travaillé pour moi.
Pas dans SQL Server –
Pour exclure les bases de données du système:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
Cela a exclu la plupart de ma base de données. – Jeff
Vous pouvez utiliser.
select Name from sys.Databases
Il liste toutes les bases de données présentes.
Testé dans la dernière version jusqu'à maintenant (SQL Server 2017).
- 1. Fusionner des bases de données SQL Server
- 2. Comment contrôler la version des bases de données SQL Server?
- 3. SQL Server: mise à niveau des bases de données
- 4. Synchroniser deux bases de données SQL Server
- 5. Codage couleur des bases de données SQL Server 2008
- 6. Obtenir la liste des colonnes calculées dans la table de base de données (SQL Server)
- 7. Comment transférer des données cryptées SQL entre des bases de données SQL Server 2005?
- 8. Project Web Access, ressources à partir des bases de données
- 9. Interrogation plusieurs bases de données sur SQL Server
- 10. SQL Server - Synchronisation de deux bases de données
- 11. Comment puis-je obtenir toutes les bases de données créées par l'utilisateur dans SQL Server 2005?
- 12. Association de tables à partir de plusieurs bases de données SQL Server situées sur des serveurs distincts
- 13. Comment effacer la liste déroulante des connexions à partir de l'invite de connexion du serveur de gestion sql server 2008?
- 14. Comment synchroniser deux bases de données SQL Server 2005?
- 15. SQL Server 2005 - Synchronisation des bases de données de développement/production
- 16. Obtenir la liste des titres à partir de fichiers xml
- 17. À partir de SPSS, importer des données à partir de SQL Server Analysis Services
- 18. MySQL: Sélection de données à partir de MS SQL Server
- 19. Comment puis-je sélectionner à partir de la liste des valeurs dans SQL Server
- 20. Indexation des bases de données
- 21. Suggestions de logiciels de déploiement/mise à niveau de bases de données multiples SQL Server 2005
- 22. Comment vérifier si deux bases de données SQL Server contiennent des données égales?
- 23. Comment puis-je gérer des bases de données SQL CE dans SQL Server Management Studio?
- 24. Trouver la taille de plusieurs bases de données dans SQL Server 2005
- 25. Utilisation de plusieurs bases de données SQLite à la fois
- 26. Rétrogradation de bases de données SQL
- 27. Comment déplacer des diagrammes entre des bases de données SQL Server?
- 28. Excluant les bases de données système lors de l'exécution de sp_databases dans SQL Server
- 29. Sql Type de données pour la clé primaire - SQL Server?
- 30. SQL Server 2005: Importation de données à partir de SQL Server 2000
@Gia Il existe en tant que vue de compatibilité ascendante. http://msdn.microsoft.com/en-us/library/ms179900%28v=SQL.110%29.aspx –
EXEC sp_databases était _slow_ à exécuter pour moi; 40 secondes sur une instance avec 36 bases de données. La sélection à partir de sysdatabases était instantanée. – MarcE
Pour développer ce que @ChrisDiver a dit: SELECT nom FROM sys.databases est l'approche préférée maintenant, plutôt que dbo.sysdatabases, qui a été déprécié depuis une décennie maintenant. – Micah