# [SQL-Server 2000] Dynamische datenbankübergreifende Abfragen?



## sums (22. März 2005)

Hi,

habe 2 getrennte Applikationen. Jede Applikation hat ihre eigene Datenbank. Jetzt ist es erforderlich Daten aus beiden Tabellen abzugleichen. Dh ich muss von einer Datenbank mittels Prozedur/Funktion/Trigger im SQL-Server auf die andere Datenbank zugreifen. 

Funktioniert ja eigentlich ganz einfach mit datenbank.besitzer.tabelle - das Ganze sollte aber dynamisch funktionieren, da ich den Datenbanknamen nicht hardcoded hinterlegen will - bei Änderung eines Datenbanknamens müsste ich mir erst wieder alle Funktionen herausfischen und dann die Änderungen durchführen. Deswegen würde ich den Funktionen gern den Datenbanknamen übergeben bzw. den in einer Tabelle ablegen - auf jeden Fall so, dass er nur an einer Stelle geändert werden muss. Nur wie kann ich dann dynamisch auf die Datenbank zugreifen? 

Hat wer eine Idee?

lg
sabrina


----------



## andi_g69 (22. März 2005)

Ich nehme an Du versuchst etwas in dieser Art:

    DECLARE @db sysname
    SET @db = 'Datenbankname'

    SELECT t1.*
    FROM @db.dbo.Tabelle AS t1

 Leider akzeptiert SQL Server im FROM Abschnitt keine Variable für den Server (und auch nicht für den owner oder die Tabelle). Diese Einschränkung lässt sich aber wie folgt umgehen:

    DECLARE @db sysname, @query varchar (500)
     SELECT @db = 'Datenbankname'

    SELECT @query = 'SELECT t1.* FROM ' + @db + '.dbo.Tabelle AS t1'

    execute (query)


----------



## sums (23. März 2005)

Danke erstmal für die Antwort.

Beim Execute gibts nur leider eine Beschränkung für die Stringlänge (. Wär ja super wenn man irgendwie die Datenbank wechseln könnte - allerdings lässt das der SQL-Server wieder nicht zu innerhalb von Funktionen etc. 

lg
sabrina


----------



## andi_g69 (23. März 2005)

Naja, wenn Deine Statements länger als 8000 Zeichen wird dann müsstest Du sie splitten. Du kannst dem execute aber auch sagen in welcher Datenbank er eine SP ausführen soll:

 DECLARE @targetDB sysname
 DECLARE @query varchar (100)

 SET @targetDB = 'IrgendeineDB'
 SET @query = 'Irgendeine abfrage'

 execute ('USE ' + @targetDB + ' GO ' + @query)

 Damit kannst Du aus einer Hauptprozedur in mehrere DBs verzweigen.


----------

