2010-09-07 21 views
11

Tengo varias bases de datos con la misma estructura su nombre como "Client1234" las diferentes en números junto a "cliente" tengo tabla llamada "Transacciones" dentro de cada base de datos y quiero ejecutar la consulta obtener el recuento de todos los raws en la tabla de "transacciones" en todas las bases de datos.Consulta en múltiples bases de datos (servidor SQL)

también cuando selecciono la base de datos necesito verificar que tiene la palabra del cliente y tiene números junto a la palabra.

+0

¿Quieres dinámicamente (sin especificar cada base de datos) consulta todas las bases de datos? – Fosco

+0

sí, necesito ejecutar una consulta en todas las bases de datos. –

Respuesta

12

Trate de usar procedimiento almacenado sp_msforeachdb así:

create table #temp ([rows] int, [client] varchar(100)) 
exec sp_msforeachdb ' 
if ''?'' like ''Client%'' and exists(select * from ?.sys.tables t where t.name = ''Transactions'') 
begin 
insert into #temp select count(*), ''?'' from ?..Transactions 
end 
' 
select * from #temp 
drop table #temp 
0

Si el nombre y el número de las bases de datos que desea consultar no se conocen de antemano, solo puede hacerlo utilizando una consulta dinámica. Tendrá que generar una secuencia de comandos como

SELECT COUNT(*) FROM Client1.dbo.Transactions 
SELECT COUNT(*) FROM Client2.dbo.Transactions 
... 

Por supuesto, necesita tener los permisos adecuados para cada base de datos.

1

Puede utilizar SQL dinámico para crear estas consultas:

select 'select count(*) from ' + name + '.dbo.transactions' 
from master..sysdatabases 
where name like 'Client%' 
and isnumeric(substring(name,6,1)) 

Esto devolver un conjunto de resultados con cada fila de una consulta SQL contar una base de datos específica. Podría ser consumido por un lenguaje de programación, usado como un cursor, etc. Si proporciona más detalles, puedo proporcionar un mejor ejemplo.

+0

¿Qué sucede si algunas de esas bases de datos no tienen esta tabla de transacciones? –

+0

sí, por favor brinde más detalles. –

1

Cuando se utiliza el método de Fosco, es una buena idea poner entre paréntesis [] alrededor del nombre de la base de datos:

SELECT 'SELECT count(*) FROM ' + '[' + name + ']' + '.dbo.transactions' 
FROM master..sysdatabases 
WHERE name like 'Client%' and isnumeric(substring(name,6,1)) 
Cuestiones relacionadas