none
Abfrage auf weitere Datenbanken RRS feed

  • 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

    Dienstag, 8. November 2011 19:51

Antworten

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
    Dienstag, 8. November 2011 19:56
    Moderator
  • 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-1facd403aba0

    Abfrage 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) >= 36

    Diese 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.members

    Bei 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.members

    Ich 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

    Dienstag, 8. November 2011 20:11
  • 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://beyondrelational.com/justlearned/posts/25/run-query-against-all-the-databases-without-msforeachdb-and-whilecursor.aspx

      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
    Dienstag, 8. November 2011 20:23
    Moderator
  • Hallo Stefan,

    super, vielen Dank, konnte den zweiten Link für mein Vorhaben übernehmen, damit klappts wunderbar :-)

    Gruss,
    Maximilian

    Dienstag, 8. November 2011 21:20