Select über 2 Datenbanken

Woll0r

Mitglied
Hallo,

ich hatte vor einiger Zeit schonmal ein ähnliches Problem mit mehreren Access Datenbanken. Ich möchte einen Select Befehl auf mehere Datenbanken ausführen. Diesmal habe ich allerdings eine MS SQL 2005 Datenbank. Ich möchte alle Felder aus einer der Tabellen in Datenbank A selecten, die in einer gleichartigen Tabelle in Datenbank B NICHT vorkommen.

Das Hauptproblem ist der Zugriff auf die 2 Tabellen in den 2 Datenbanken. Eine Nebenfrage ist, wie die Abfrage genau aussehen muss um möglichst perfomant alle NICHT Übereinstimmungen zu finden.

Bisher hatte ich den Ansatz zuerst alle Datensätze aus Datenbank A in ein Recordset zu laden und dann in einer Schleife zu versuchen aus Datenbank gleiche Datensätze mit "Where" zu finden. Wenn das Recordset aus Datenbank B dann eof war, wusste ich ich hatte eine NICHT übereinstimmung gefunden. Dies ist aber VIEL zu langsam.

Für Hilfe wäre ich sehr dankbar.

Danke und Grüße
Woll0r

P.S. Ich werde wohl erst am Dienstag dazu kommen hier wieder rein zu schauen.
 
Sollte eigentlich so funktionieren
SQL:
Select * 
From datenbank1.dbo.Tabelle1 
Where Keyfeld not in (Select keyfeld from datenbank2.dbo.Tabelle2 )

wenn die du keine eindeutigen keys hast kannst du dir die mit concat auf deine Where bedingung zusammenbauen

Grüsse bb
 
Hat bestens funktioniert. Vielen Dank.

P.S. Das Ausführen des Befehls dauert zwar immer noch länger als ich erwartet hatte, aber ich denke so ist die technisch schnellste Variante realisiert.
 
Hallo,

ein Problem habe ich doch noch. Bei unseren Test Datenbanken funktioniert das Ganze Prima. Wenn ich das Ganze auf unsere richtigen Datenbanken anwenden will, werden plötzlich nur noch 0 Recordsets gefunden. Dabei sind die Testdatenbanken nur eine Kopie der richtigen Datenbanken gewesen. In den richtigen Datenbanken sind definitiv Datensätze die er finden müsste. Hat jemand eine Idee woran das liegen könnte? Bin da irgendwie mit meinem Latein am Ende, da ich ja nicht in die SQL Abfrage "reingucken" kann, wie die den Abgleich tatsächlich ausführt.
Bei meiner Alten, leider viel zu langsamen, Variante bei der ich einzelne Recordsets erstellt habe und diese in einer Schleife verglichen habe, konnte ich wenigstens immer sehen was gerade passiert...

Für Hilfe wäre ich sehr Dankbar

Grüße Woll0r
 
beim sql-Server solltest du doch auch über das Sql-Servermanagement Studio die Queries einzel ausführen können.

-> mit dem sql -Server verbinden - > auf NewQuery gehen und dann das sql abschiessen.

Wenn du hier auch keine Ergebnisse bekommst. Einfach mal die Teilmengen ausgeben lassen ( also das was in () in der Where bedingung steht )

Grüsse bb

PS: Leider kann man hier ja nur vermuten. Wenn die Testdatenbanken eigentlich nur ein abzug sind sollte es dort eigentlich auch funktionieren.
 
Hallo,

die SQL Strings direkt in der DB zu testen war eine gute Idee.

Ich habe den Fehler gefunden. Die Test Datenbank war zwar von Ihrer Struktur her eine Kopie der Original Datenbank, die in ihr enthaltenen Datensätze aber nicht, da ich beim Testen alle mal gelöscht und manuell neu eingetragen habe. Das Problem war, dass in der Orginal Datenbank einige Datensätze vorhanden waren, bei denen das Suchfeld "NULL" war. Ohne "NULL" Datensätze funktioniert das ganze jetzt super.

Vielen Dank
Woll0r
 

Neue Beiträge

Zurück