2010-08-03 8 views
5

Al hacer una consulta sobre varias bases de datos en el servidor SQL (2005+) Me resulta a veces NECESARIO para excluir la base de datos del sistema (master, model, tempdb, msdb y distribución)¿Es posible consultar las bases de datos del sistema en el servidor SQL sin utilizar los nombres?

¿Hay alguna otra forma de filtrar estos además

where name not in (''master', 'model', 'tempdb', 'msdb', 'distribution') 

he mirado en sys.databases y master.dbo.sysdatabases (no es lo mismo!)

[ACTUALIZACIÓN] una consulta de ejemplo que utilizo para buscar bases de datos que tienen habilitada logshipping

select d.name, p.last_backup_date, s.secondary_server, s.secondary_database 
from sys.databases d 
    left outer join msdb..log_shipping_primary_databases p on p.primary_database = d.name 
    left outer join msdb..log_shipping_primary_secondaries s on s.primary_id = p.primary_id 
where name not in ('model','master','tempdb','distribution','msdb') 
order by d.name 

[ACTUALIZACIÓN] ¿Esta parece ser la forma "menos mala", a menos que alguien más tenga una mejor manera?

SELECT * FROM 
master.sys.databases AS dtb 
WHERE (dtb.database_id < 5 or dtb.is_distributor = 1) 
+1

¿Podría darnos un ejemplo de las consultas que está ejecutando? – Codesleuth

+0

Ejemplo de consulta agregada. – edosoft

Respuesta

6

Ejecuté el Analizador de SQL y actualicé el nodo de bases de datos del sistema en el estudio de administración. Se utiliza la consulta

...FROM 
master.sys.databases AS dtb 
WHERE 
(CAST(case when dtb.name in ('master','model','msdb','tempdb') 
then 1 else dtb.is_distributor end AS bit)=1) 

Así que supongo que se podría combinar las dbid y is_distributor cheques.

3

No hay medios seguros más allá de buscar el nombre. Si solo quería filtrar las cuatro bases de datos principales (maestro, modelo, msdb, tempdb), puede filtrar de forma segura en DBID > 4. Sin embargo, la base de datos de distribución obtendrá un DBID como una base de datos normal y, por lo tanto, no puede confiar en su DBID.

+0

Gracias. También noté el DBID de distribución, es el motivo subyacente de mi pregunta. – edosoft

0
select 
    * 
from 
    sys.databases 
where 
    name in ('master','model','msdb','tempdb') 
    or is_distributor = 1 
Cuestiones relacionadas