Sie sagen, dass beide Kunden Ihre Anwendung verwenden, also nehme ich an, dass es sich um eine Art „Shrink-Wrap“-Software handelt, die von mehr Kunden als nur diesen beiden verwendet wird, richtig?
Wenn ja, wird das Hinzufügen spezieller Spalten zu den Tabellen oder ähnliches in Zukunft wahrscheinlich zu Problemen führen, da Sie entweder eine spezielle Version für diese beiden Kunden pflegen müssten, die mit den zusätzlichen Spalten umgehen kann. Oder Sie müssten diese Spalten in Ihre Hauptcodebasis einführen, was bedeutet, dass alle Ihre anderen Kunden sie ebenfalls erhalten würden.
Ich kann mir einen einfacheren Weg vorstellen, dies zu tun, ohne eine Ihrer Tabellen zu ändern oder Spalten hinzuzufügen.
Damit dies funktioniert, müssen Sie die größte ID herausfinden, die in beiden Datenbanken zusammen existiert ( egal in welcher Tabelle oder in welcher Datenbank es ist) .
Dies kann etwas Kopieren und Einfügen erfordern, um viele Abfragen zu erhalten, die wie folgt aussehen:
select max(id) as maxlocationid from locations
select max(id) as maxpersonid from persons
-- and so on... (one query for each table)
Wenn Sie die größte ID finden, nachdem Sie die Abfrage in beiden Datenbanken ausgeführt haben, nehmen Sie eine Zahl, die größer als diese ID ist, und fügen Sie sie zu allen IDs in allen Tabellen in der zweiten Datenbank hinzu.
Es ist sehr wichtig, dass die Zahl muss größer sein als die größte ID, die bereits in beiden Datenbanken vorhanden ist!
Es ist etwas schwierig zu erklären, deshalb hier ein Beispiel:
Angenommen, die größte ID in einer Tabelle in beiden Datenbanken ist 8000
.
Dann führen Sie SQL aus, das 10000
hinzufügt zu jeder ID in jeder Tabelle in der zweiten Datenbank :
update Locations set Id = Id + 10000
update Persons set Id = Id + 10000, LocationId = LocationId + 10000
-- and so on, for each table
Die Abfragen sind relativ einfach, aber das ist die meiste Arbeit, weil Sie eine Abfrage wie diese manuell für jede Tabelle in der Datenbank erstellen müssen, mit den korrekten Namen aller ID-Spalten.
Nachdem Sie die Abfrage in der zweiten Datenbank ausgeführt haben, sehen die Beispieldaten Ihrer Frage folgendermaßen aus:
Datenbank 1: (genau wie vorher)
Locations
:
Id Name Adress etc....
1 Location 1
2 Location 2
Persons
:
Id LocationId Name etc...
1 1 Alex
2 1 Peter
3 2 Lisa
Datenbank 2:
Locations
:
Id Name Adress etc....
10001 Location A
10002 Location B
Persons
:
Id LocationId Name etc...
10001 10001 Mark
10002 10002 Ashley
10003 10001 Ben
Und das ist es! Jetzt können Sie die Daten von einer Datenbank in die andere importieren, ohne dass es überhaupt zu Primärschlüsselverletzungen kommt.