Obtener una lista de bases de datos de SQL Server

¿Cómo puedo obtener la lista de bases de datos disponibles en una instancia de SQL Server? Estoy planeando hacer una lista de ellos en un cuadro combinado en VB.NET.

Ejecutar:

SELECT name FROM master.sys.databases

Este es el enfoque preferido ahora, en lugar de dbo.sysdatabases , que ha estado obsoleto por algún tiempo.


Ejecute esta consulta:

 SELECT name FROM master.dbo.sysdatabases 

o si prefieres

 EXEC sp_databases 

a la luz de la ambigüedad en cuanto al número de bases de datos que no son de usuario, probablemente debería agregar:

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

y agregue los nombres de las bases de datos de servicios de informes

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 el id_base_datos preciso, debe ser mayor que 4, omita las bases de datos del sistema de listado que tienen una 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

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 

No te confundas, utiliza la siguiente consulta simple 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 (resource, distribution, reportservice, reportservicetempdb) simplemente insértelos en la consulta. Si tiene los db anteriores en su máquina como predeterminado.

Las bases de datos del sistema con ID 5 y 6 serán ReportServer y ReportServerTempDB si tiene SQL Server Reporting Services instalado.

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

Esto funcionará para ambas condiciones, si la generación de informes está habilitada 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(); } 

En SQL Server 7, dbid 1 a 4 son los dbs del sistema.

Si desea omitir las bases de datos del sistema y las tablas de ReportServer (si está 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 

Esto funciona en Sql Server 2008/2012/2014. La mayoría de las consultas provienen del procedimiento almacenado del sistema ” sp_databases “. Solo elimino la columna innecesaria y agregué 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] 

¡quizás soy un dodo!

show databases; trabajó para mi.

Puede encontrar todos los nombres de las bases de datos con esto:

  select name from sys.sysdatabases 

En SQL Server 2008 R2 esto funciona:

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

Y enumere solo las bases de datos creadas por el usuario (s).

Para excluir las bases de datos del sistema:

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