Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie füge ich zwei identische Datenbankdaten zu einer zusammen?

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.