Obter a lista de bases de dados do servidor SQL
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
À 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
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
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
Funciona no nosso servidor SQL 2008
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.
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
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();
}
No servidor SQL 7, o dbid 1 através do 4 é o DBS do sistema.
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.
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]
show databases;
funcionou comigo.
Você pode encontrar todos os nomes de bases de dados com este: -
select name from sys.sysdatabases
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).
Para excluir bases de dados do sistema:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01