Respuestas:
Ejecutar:
SELECT name FROM master.sys.databases
Este es el enfoque preferido ahora, en lugar de dbo.sysdatabases
, que ha quedado en desuso por algún tiempo.
Ejecute esta consulta:
SELECT name FROM master.dbo.sysdatabases
o si lo prefieres
EXEC sp_databases
exec sp_databases
no funcionó. Los otros dos ( master.dbo.sysdatabases
y sys.databases
) todavía funcionan.
Para excluir las bases de datos del sistema:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
Editado: 2:36 PM 2/5/2013
Actualizado con database_id preciso, debe ser mayor que 4, para omitir la lista de bases de datos del sistema que tienen un ID de base de datos entre 1 y 4.
SELECT *
FROM sys.databases d
WHERE d.database_id > 4
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
Funciona en nuestro SQL Server 2008
ID
5 y 6 serán ReportServer
y ReportServerTempDB
si las tiene SQL Server Reporting Services
instaladas.
Como está utilizando .NET, puede usar los objetos de administración de 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();
No se confunda, use la consulta simple a continuación para obtener todas las bases de datos,
select * from sys.databases
Si solo necesita las bases de datos definidas por el usuario;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
Algunos de los nombres de bases de datos del sistema son (recurso, distribución, servicio de informes, informes, servicio, tmpdb) simplemente insértelo en la consulta. Si tiene los db anteriores en su máquina por defecto.
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
Esto funcionará para ambas condiciones, ya sea que los informes estén habilitados o no
Uso el siguiente código de Objetos de administración de SQL Server para obtener una lista de bases de datos que no son bases de datos del sistema y no son instantáneas.
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();
o foreach (var Db in new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases)
como en .NET 4.0 + SQL Server 2014 o .SqlServer.Smo \ 12.0.0.0
Si desea omitir las bases de datos del sistema y las tablas de ReportServer (si están 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
Esto funciona en SQL Server 2008/2012/2014. La mayor parte de la consulta proviene del procedimiento almacenado del sistema " sp_databases ". Solo elimino la columna innecesaria y agrego donde las condiciones.
No estoy seguro de si esto omitirá las bases de datos del servidor de informes ya que no estoy ejecutando una, pero por lo que he visto, puedo omitir las bases de datos propiedad del usuario del sistema con 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]
tal vez soy un dodo!
show databases;
trabajó para mi.
Puede encontrar todos los nombres de bases de datos con esto: -
select name from sys.sysdatabases
Para excluir las bases de datos del sistema:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
sid
columna sobre la sys.databases
mesaowner_sid