2010-09-07 14 views
11

Ich habe mehrere Datenbanken mit gleicher Struktur seinen Namen wie "Client1234" die verschiedenen in Zahlen neben "Client" Ich habe Tabelle namens "Transaktionen" in jeder Datenbank und ich möchte Abfrage ausführen Zählen Sie alle Raws in der Tabelle "transactions" in allen Datenbanken.Abfrage auf mehrere Datenbanken (SQL-Server)

auch wenn ich datenbank muss ich überprüfen, es hat das klient wort und es hat nummern neben dem wort.

+0

Sie wollen dynamisch (ohne jede Datenbank angibt) Abfrage alle Datenbanken? – Fosco

+0

Ja, ich muss eine Abfrage in allen Datenbanken ausführen. –

Antwort

12

Try sp_msforeachdb gespeicherte Prozedur wie so zu verwenden:

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

Wenn Name und Nummer der Datenbanken, die Sie abfragen möchten, nicht im Voraus bekannt sind, können Sie dies nur mithilfe einer dynamischen Abfrage tun. Sie müssen ein Skript wie

erzeugen

Natürlich müssen Sie Ihre entsprechenden Berechtigungen für jede Datenbank vorhanden haben.

1

Sie dynamische SQL diese Abfragen erstellen können:

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

Dieses eine Ergebnismenge mit jeder Reihe eine SQL-Abfrage zurückkehren um eine bestimmte Datenbank zu zählen. Es könnte von einer Programmiersprache konsumiert werden, die als Cursor usw. verwendet wird. Wenn Sie mehr Details angeben, kann ich vielleicht ein besseres Beispiel geben.

+0

Was passiert, wenn einige dieser Datenbanken nicht diese Transaktionstabelle haben? –

+0

ja bitte geben Sie weitere Details an. –

1

Wenn Fosco Methode verwendet wird, ist es eine gute Idee, [] um die Datenbank-Namen in Klammern zu setzen:

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