Obter a lista de bases de dados do servidor SQL

Como posso obter a lista de bases de dados disponíveis numa instância do servidor SQL? Estou a planear fazer uma lista deles numa caixa de combinação em VB.NET.

 280
Author: bluish, 2008-09-29

15 answers

Executar:

SELECT name FROM master.sys.databases

Esta é a abordagem preferida agora, em vez de dbo.sysdatabases, que tem sido desacreditado por algum tempo.


Execute esta pesquisa:

SELECT name FROM master.dbo.sysdatabases

Ou se preferir

EXEC sp_databases
 453
Author: Ben Hoffstein, 2018-05-28 16:20:06

À luz da ambiguidade quanto ao número de bases de dados não-utilizadoras, deve adicionar:

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

E acrescentar os nomes das bases de dados dos serviços de informação

 72
Author: GilShalit, 2011-05-26 13:57:00

Para excluir bases de dados do sistema:

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

Editado: 2: 36 PM 2/5/2013

Actualizado com dados precisos_id, deverá ser superior a 4, para não listar bases de dados do sistema com id de base de dados entre 1 e 4.

SELECT * 
FROM sys.databases d
WHERE d.database_id > 4
 46
Author: GilM, 2013-02-05 09:08:30
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 

Funciona no nosso servidor SQL 2008

 23
Author: Frank, 2016-01-15 13:58:55

Dado que está a usar a. NET, poderá usar os objectos de gestão do servidor de SQL

Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
For Each db As Database In server.Databases
    Console.WriteLine(db.Name)
Next
 20
Author: Chris Diver, 2011-08-07 22:35:07

Não se confunda, Use a consulta simples abaixo para obter todas as bases de dados,

select * from sys.databases

Se necessitar apenas das bases de dados definidas pelo Utilizador;

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

Alguns dos nomes das bases de dados do sistema são (resource,distribution,reportservicetempdb) basta inseri-lo na consulta. Se você tiver os db acima em sua máquina como padrão.

 12
Author: Balaji, 2014-07-18 10:56:47
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'

Isto funcionará para ambas as condições, quer o relatório esteja activo ou não

 5
Author: ManiG, 2013-10-28 06:44:31

Uso o seguinte código SQL Server Management Objects para obter uma lista de bases de dados que não são bases 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();
}
 3
Author: Rob Prouse, 2013-12-11 15:32:02

No servidor SQL 7, o dbid 1 através do 4 é o DBS do sistema.

 2
Author: JerryOL, 2011-07-21 20:56:44

Se quiser omitir as bases de dados do sistema e as tabelas de notificação (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
Isto funciona no servidor Sql 2008/2012/2014. A maioria da consulta vem de" sp_ databases " system stored procedure. Só removo a coluna sem necessidade e adiciono as condições.
 1
Author: Tarık Özgün Güner, 2014-07-02 11:29:39

Não sei se isto irá omitir as bases de dados do servidor de Relatórios, uma vez que não estou a correr uma, mas pelo que vi, posso omitir bases de dados de propriedade do utilizador 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]
 1
Author: watch_amajigger, 2014-09-13 20:11:34
Talvez eu seja um Dodô!

show databases; funcionou comigo.

 -1
Author: thedanotto, 2017-01-28 00:32:00

Você pode encontrar todos os nomes de bases de dados com este: -

 select name from sys.sysdatabases
 -3
Author: david sam, 2016-02-09 08:59:49

No servidor SQL 2008 R2 isto funciona:

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

E listar apenas bases de dados criadas pelo(s) utilizador (es).

 -4
Author: saper_2, 2016-01-15 13:59:14

Para excluir bases de dados do sistema:

SELECT name FROM master.dbo.sysdatabases where sid <>0x01
 -4
Author: Luca, 2017-02-14 08:00:04