Obter lista de bancos de dados do SQL Server

Como posso obter a lista de bancos de dados disponíveis em uma instância do SQL Server? Estou planejando fazer uma lista deles em uma checkbox de combinação no VB.NET.

Executar:

SELECT name FROM master.sys.databases

Esta é a abordagem preferida agora, em vez de dbo.sysdatabases , que foi preterido por algum tempo.


Execute esta consulta:

 SELECT name FROM master.dbo.sysdatabases 

ou se você preferir

 EXEC sp_databases 

Em vista da ambiguidade quanto ao número de bancos de dados não-usuários, você provavelmente deve adicionar:

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

e adicione os nomes dos bancos de dados dos serviços de relatórios

Para excluir bancos de dados do sistema:

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

Editado: 2:36 PM 2/5/2013

Atualizado com database_id preciso, deve ser maior que 4, para pular os bancos de dados do sistema de listview que possuem ID de database entre 1 e 4.

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

Funciona no nosso SQL Server 2008

Como você está usando o .NET, pode usar os Objetos de Gerenciamento do SQL Server

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

Não se confunda, use a consulta simples abaixo para obter todos os bancos de dados,

 select * from sys.databases 

Se você precisar apenas dos bancos de dados definidos pelo usuário;

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

Alguns dos nomes de database do sistema são (recurso, distribuição, serviço de relatórios, reportservicetempdb) apenas inseri-lo na consulta. Se você tiver o db acima em sua máquina como padrão.

Bancos de dados do sistema com ID 5 e 6 serão ReportServer e ReportServerTempDB se você tiver o SQL Server Reporting Services instalado.

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

Isso funcionará para ambas as condições, se o relatório estiver ativado ou não

Eu uso o seguinte código de objects de gerenciamento do SQL Server para obter uma lista de bancos de dados que não são bancos de dados do sistema e não são instantâneos.

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

No SQL Server 7, dbid 1 a 4 são os dbs do sistema.

Se você quiser omitir bancos de dados do sistema e tabelas ReportServer (se instaladas):

 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 

Isso funciona no Sql Server 2008/2012/2014. A maior parte da consulta vem do procedimento armazenado do sistema ” sp_databases “. Eu só removo a coluna desnecessária e adiciono as condições.

Não tenho certeza se isso omitirá os bancos de dados do servidor de relatórios, pois não estou executando um, mas pelo que vi, posso omitir os bancos de dados de propriedade do usuário do sistema com este 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] 

talvez eu seja um dodo!

show databases; trabalhou para mim.

Você pode encontrar todos os nomes de bancos de dados com isto:

  select name from sys.sysdatabases 

No SQL Server 2008 R2 isso funciona:

 select name from master.sys.databases where owner_sid > 1; 

E liste apenas os bancos de dados criados pelo (s) usuário (s).

Para excluir bancos de dados do sistema:

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