¿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.Obtener lista de bases de datos de SQL Server
Respuesta
Ejecutar esta consulta:
SELECT name FROM master.dbo.sysdatabases
o si lo prefiere
EXEC sp_databases
Para excluir las bases de datos del sistema:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
Editado: 14:36 2/5/2013
Actualizado con database_id precisa, debe ser mayor de 4, saltarse la lista de bases de datos del sistema que están teniendo Número de registro entre 1 y 4.
SELECT *
FROM sys.databases d
WHERE d.database_id > 4
Esto no funciona. Quizás quisiste decir> 4? Las tablas 5 y 6 son tablas de usuarios. –
Parece que siempre debe ser> 4, aunque el servidor que estoy comprobando tiene "ReportServer" y "ReportServerTempDB" en las posiciones 5 y 6. – Trisped
para mí> 6 haría. –
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
Obras en nuestro SQL Server 2008
Las bases de datos del sistema con ID 5 y 6 serán ReportServer y ReportServerTempDB si tiene SQL Server Reporting Services instalado.
Solo si estuvo (tonto E instaló Reporting Services usando el instalador SQL (en lugar de no aceptar valores predeterminados y configurar usando el administrador más adelante)) O (increíble e instaló un servidor SQL usando un archivo INF preconfigurado) –
a la luz de la ambigüedad en cuanto al número de bases de datos no usuarios, probablemente debería añadir:
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
y añadir los nombres de las bases de datos de Reporting Services
En SQL Server 7, dbida 1 a 4 son los dbs del sistema.
dado que está utilizando .NET puede utilizar el SQL Server Management Objects
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 "). Bases de datos.Cast
Dudo que (localhost) se lea desde algún archivo de configuración. No pude hacerlo funcionar con mi "myhost" (que es mi nombre de host correcto, digamos obtenido por Environment.MachineName). ¿Esto funcionará si reemplazo "localhost" con "myhost"? –
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
Esto funciona tanto para la condición, si está habilitada o no
Cuidado, si su servidor es una instancia con nombre, los nombres db ReportServer son como ReportServer $ InstanceName y ReportServer $ InstanceNameTempDB. Entonces, esto funcionaría de cualquier manera: SELECCIONE [nombre] FROM master.dbo.sysdatabases DONDE dbid> 4 y [nombre] no como 'ReportServer%' – ToddK
uso el siguiente código SQL Server Management Objects 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();
}
un oneliner:. 'var DBsLOC = new Microsoft.SqlServer.Management.Smo.Server ("localhost") Databases.Cast
Si desea omitir las bases de datos del sistema y tablas 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 se confunda, utilice la siguiente consulta sencilla de obtener todas las bases de datos,
select * from sys.databases
U Si necesita sólo las bases de datos definidos por el usuario;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
Algunos de los nombres de bases de datos de sistema son (de recursos, distribución, ReportService, reportservicetempdb) Sólo tiene que insertar en la consulta. Si tiene los db anteriores en su máquina por defecto.
No estoy seguro si esto va a omitir las bases de datos del servidor de informes ya que no estoy corriendo uno, pero por lo que he visto, puedo omitir bases de datos propiedad de 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]
Usted puede encontrar toda nombres de bases de datos con esto: -
select name from sys.sysdatabases
no añade nada a través de los años publicado respuestas anteriores –
¡quizás yo soy un dodo!
show databases;
funcionó para mí.
no en SQL Server –
Para excluir las bases de datos del sistema:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
Esto excluye la mayor parte de mi base de datos. – Jeff
Puede usar.
select Name from sys.Databases
Lista de todas las bases de datos presentes.
Probado en la última versión hasta ahora (SQL Server 2017).
- 1. lista de diferencias entre las bases de datos SQL
- 2. Vista de SQL Server en varias bases de datos
- 3. ¿Cómo controlar las bases de datos de SQL Server?
- 4. SQL Server: Migrar procedimientos almacenados entre bases de datos, instancias
- 5. Dejar y recrear bases de datos en Microsoft SQL Server
- 6. Cómo descartar varias bases de datos en SQL Server
- 7. ¿Cómo combinar dos bases de datos en SQL Server?
- 8. MongoDB: ¿Obtener la lista de todas las bases de datos?
- 9. Cómo transferir datos cifrados sql entre bases de datos de SQL Server 2005?
- 10. SQL Server ¿Lista de errores?
- 11. Cómo obtener una lista de todas las tablas en dos bases de datos diferentes
- 12. Asistente de publicación de bases de datos SQL con SQL Server 2008
- 13. Obtener lista de columnas calculadas en tabla de base de datos (SQL Server)
- 14. Django: Obtener datos de diferentes bases de datos
- 15. FxCop para SQL Server - Herramienta para analizar las bases de datos de SQL Server en busca de posibles problemas
- 16. SQL Server: Obtener datos el año pasado
- 17. Encontrar el tamaño de múltiples bases de datos en SQL Server 2005
- 18. Auditoría de datos de SQL Server cambia
- 19. ¿Cómo puedo gestionar bases de datos SQL CE en SQL Server Management Studio?
- 20. Copiar valores BLOB entre bases de datos con SQL puro en SQL Server
- 21. Ampliación de la lista de bases de datos en SQL Server 2008 Management Studio requiere más tiempo que SQL Server 2005
- 22. Comparar dos bases de datos SQL
- 23. ¿Cómo obtener una lista de usuarios de bases de datos de todas las instancias
- 24. Tipo de datos sql para clave principal - SQL Server?
- 25. ¿Inyecciones de SQL con bases de datos sin SQL?
- 26. País, lista de estado para SQL Server
- 27. ¿Cómo uso BCP o Sql Server Management Studio para obtener datos BLOB de SQL Server?
- 28. Despliegue de bases de datos de SQL Server desde Test to Live
- 29. Codificación por color de las bases de datos de SQL Server 2008
- 30. ¿De qué tamaño son las instalaciones de bases de datos SQL Server más grandes del mundo?
@Gia Existe como una vista de compatibilidad hacia atrás. http://msdn.microsoft.com/en-us/library/ms179900%28v=SQL.110%29.aspx –
EXEC sp_databases was _slow_ para ejecutar para mí; 40 segundos en una instancia con 36 bases de datos. Seleccionar desde bases de datos sys fue instantáneo. – MarcE
Para ampliar lo que dijo @ChrisDiver: SELECCIONAR el nombre FROM sys.databases es el enfoque preferido ahora, en lugar de dbo.sysdatabases, que ha quedado obsoleto desde hace una década. – Micah