Benutzer mit den meisten Antworten
Abfrage auf weitere Datenbanken

Frage
-
Hall0,
ich möchte die master.sys.databases abfragen und dabei auf alle Datenbank-Namen die einer GUID entsprechen diese dann in einem zweiten Select abfragen.
Leider kann ich zwar die Datenbanknamen erfassen und in eine temporäre Tabelle einfügen, aber ein weiterer Select auf die Datenbank des gefunden Datenbanknamen klappt es dann nicht mehr.
Beispiel:
in master.sys.databases abgefragter Name einer Datenbank wäre 123456, klappt die weitere Abfrage dann per select * from name.teilnehmer nicht mehr.Wie kann ich den per Select diese Datenbanken abfragen?
Viele Grüsse,
Maximilian
Antworten
-
Hallo Maximilian,
das geht wohl nur mit dynamischem SQL, da man direkt in T-SQL IIRC keine Datenbanknamen als Variable setzen kann. Wenn Du bspw. per C#, Script, ... auf die Datenbanken zugreifst, geht das problemlos.
Hier findest Du ein Beispiel für etwas ähnliches.http://blog.universql.com/sql-server-2008/dynamically-backup-and-compress-user-databases-sql-2008/
http://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert MaxiTesch Dienstag, 8. November 2011 21:21
Alle Antworten
-
Hallo Maximilian,
so genau hab ich das Problem nicht verstanden.
Wenn Du den Datenbanknamen hast, Du aber derzeit auf der master DB bist, kannst Du per:
USE AndereDatenbank
dorthin verbinden. Eine nachfolgende Abfrage von:
SELECT ... FROM teilnehmer
würde funktionieren.
Alternativ kannst Du auch
SELECT ... FROM AndereDatenbank.dbo.teilnehmer
ausführen. (vorausgesetzt, die Tabelle "teilnehmer" ist im "dbo" Schema)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
lass es mich hoffentlich besser erklären.
In der master.sys.databases sind zum beispiel zwei Datenbanken eingetragen, der Datenbankname ist gleich einer GUID:
4e777138-51f9-47a9-bd13-4c73bb0b381b
a71c5d48-3ccb-4b26-8272-1facd403aba0Abfrage ist dann:
select
dtb.name AS id,
dtb.state_desc as dbstatus
from
master.sys.databases as dtb
where database_id > 4 and LEN(name) >= 36Diese Abfrage inserte ich dann in eine temporäre Tabelle die ich dann durchgehe um weitere Daten aus verschiedenen Tabellen der Datenbank hinzuzufügen.
Nemen wir den ersten abgefragten Datenbanknamen und fragen damit zum Beispiel die Teilnehmer ab:
select name, firstname from [#tempdata.id].dbo.membersBei diesem Beispiel will ich [#tempdata.id] durch [4e777138-51f9-47a9-bd13-4c73bb0b381b] ersetzen.
Wenn ich das in der SQL Konsole direkt eingebe, klappt es:
select name, firstname from [4e777138-51f9-47a9-bd13-4c73bb0b381b].dbo.membersIch würde es am liebsten bereits in der ersten Abfrage auf die master.sys.database ausführen, aber ich komme nicht darauf bzw ich bringe die Abfrage nicht umgesetzt damit diese akzeptiert wird.
Hoffe das es jetzt etwas klarer ist was ich möchte.
Viele Grüsse,
Maximilian -
Hallo Maximilian,
das geht wohl nur mit dynamischem SQL, da man direkt in T-SQL IIRC keine Datenbanknamen als Variable setzen kann. Wenn Du bspw. per C#, Script, ... auf die Datenbanken zugreifst, geht das problemlos.
Hier findest Du ein Beispiel für etwas ähnliches.http://blog.universql.com/sql-server-2008/dynamically-backup-and-compress-user-databases-sql-2008/
http://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert MaxiTesch Dienstag, 8. November 2011 21:21