2008-09-29 43 views

Respuesta

397

Ejecutar esta consulta:

SELECT name FROM master.dbo.sysdatabases 

o si lo prefiere

EXEC sp_databases 
+5

@Gia Existe como una vista de compatibilidad hacia atrás. http://msdn.microsoft.com/en-us/library/ms179900%28v=SQL.110%29.aspx –

+4

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

+6

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

46

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 
+7

Esto no funciona. Quizás quisiste decir> 4? Las tablas 5 y 6 son tablas de usuarios. –

+1

Parece que siempre debe ser> 4, aunque el servidor que estoy comprobando tiene "ReportServer" y "ReportServerTempDB" en las posiciones 5 y 6. – Trisped

+0

para mí> 6 haría. –

22
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 

Obras en nuestro SQL Server 2008

10

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

+0

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) –

68

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

2

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

-1

En SQL Server 2008 R2 esto funciona:

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

Y lista sólo bases de datos creadas por el usuario (s).

+0

Pruebe 'owner_sid <> 1' – wqw

+7

Editar: ¡Esto está tan mal! 'owner_sid = 1' significa' sa' propietario, nada especial al respecto. – wqw

19

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 
+0

'var SDBLOC = new Microsoft.SqlServer.Management.Smo.Server (" localhost "). Bases de datos.Cast (). Where (bs =>! Bs.IsSystemObject && bs. ID> 6) .ToList(); ' –

+0

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"? –

5
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

+1

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

3

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(); 
} 
+0

un oneliner:. 'var DBsLOC = new Microsoft.SqlServer.Management.Smo.Server ("localhost") Databases.Cast () Donde (bs => bs.IsSystemObject && bs.ID> 6!) .ToList(); '' o foreach (var Db en la nueva Microsoft.SqlServer.Management.Smo.Server (" localhost "). las bases de datos)' como en .NET 4.0 + SQL Server 2014 o .SqlServer.Smo \ 12.0.0.0 –

1

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.

10

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.

1

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] 
-1

Usted puede encontrar toda nombres de bases de datos con esto: -

select name from sys.sysdatabases 
+0

no añade nada a través de los años publicado respuestas anteriores –

2

¡quizás yo soy un dodo!

show databases; funcionó para mí.

+3

no en SQL Server –

-1

Para excluir las bases de datos del sistema:

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

Esto excluye la mayor parte de mi base de datos. – Jeff

0

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).

Cuestiones relacionadas