Respostas:
Executar:
SELECT name FROM master.sys.databases
Essa é a abordagem preferida agora, e não dbo.sysdatabases
, que está obsoleta há algum tempo.
Execute esta consulta:
SELECT name FROM master.dbo.sysdatabases
ou se você preferir
EXEC sp_databases
exec sp_databases
não funcionou. Os outros dois ( master.dbo.sysdatabases
e sys.databases
) ainda funcionam.
Para excluir bancos de dados do sistema:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
Edição: 14:36 05/02/2013
Atualizado com database_id preciso, deve ser maior que 4, para pular a lista de bancos de dados do sistema que possuem ID de banco 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 em nosso SQL Server 2008
ID
5 e 6 serão ReportServer
e ReportServerTempDB
se você tiver SQL Server Reporting Services
instalado.
Como você está usando o .NET, você 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
var SDBLOC = new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases.Cast<Microsoft.SqlServer.Management.Smo.Database>().Where(bs => !bs.IsSystemObject && bs.ID>6).ToList();
Não fique confuso, 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 banco de dados do sistema são (recurso, distribuição, serviço de relatórios, reportservicetempdb), basta inseri-lo na consulta. Se você tiver os bancos de dados acima em sua máquina como padrão.
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 está ativado ou não
Eu uso o código a seguir do SQL Server Management Objects para obter uma lista de bancos de dados que não são 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();
}
var DBsLOC = new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases.Cast<Microsoft.SqlServer.Management.Smo.Database>().Where(bs => !bs.IsSystemObject && bs.ID>6).ToList();
ou foreach (var Db in new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases)
como no .NET 4.0 + SQL Server 2014 ou .SqlServer.Smo \ 12.0.0.0
Se você deseja omitir bancos de dados do sistema e tabelas ReportServer (se instalado):
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 maioria das consultas vem do procedimento armazenado do sistema " sp_databases ". Eu removo apenas a coluna desnecessária e adicionei as condições.
Não tenho certeza se isso omitirá os bancos de dados do servidor de relatório, pois não estou executando um, mas pelo que vi, posso omitir 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 dodô!
show databases;
trabalhou para mim.
No SQL Server 2008 R2, isso funciona:
select name
from master.sys.databases
where owner_sid > 1;
E liste apenas bancos de dados criados pelo (s) usuário (s).
owner_sid=1
significa sa
dono, nada de especial nisso.
Você pode encontrar todos os nomes de banco de dados com este: -
select name from sys.sysdatabases
Para excluir bancos de dados do sistema:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
sid
coluna na sys.databases
tabelaowner_sid