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

sums

Grünschnabel
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
 
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)
 
Zuletzt bearbeitet:
Danke erstmal für die Antwort.

Beim Execute gibts nur leider eine Beschränkung für die Stringlänge :eek:(. 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
 
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.
 

Neue Beiträge

Zurück