sql >> Database >  >> RDS >> Sqlserver

Hoe twee identieke databasegegevens samenvoegen tot één?

U zegt dat beide klanten uw applicatie gebruiken, dus ik neem aan dat het een soort "shrink-wrap"-software is die door meer klanten wordt gebruikt dan alleen deze twee, correct?

Zo ja, dan zal het toevoegen van speciale kolommen aan de tabellen of iets dergelijks in de toekomst waarschijnlijk pijn veroorzaken, omdat u ofwel een speciale versie voor deze twee klanten zou moeten onderhouden die de extra kolommen aankan. Of u zou deze kolommen moeten introduceren in uw hoofdcodebase, wat betekent dat al uw andere klanten ze ook zouden krijgen.

Ik kan een eenvoudigere manier bedenken om dit te doen zonder een van uw tabellen te wijzigen of kolommen toe te voegen.
Om dit te laten werken, moet u de grootste ID vinden die in beide databases samen bestaat ( ongeacht in welke tabel of in welke database het is) .

Dit kan wat kopiëren en plakken vereisen om veel vragen te krijgen die er als volgt uitzien:

select max(id) as maxlocationid from locations
select max(id) as maxpersonid from persons
-- and so on... (one query for each table)

Wanneer u de grootste ID vindt na het uitvoeren van de query in beide databases, neem dan een getal dat groter is dan die ID en voeg dit toe aan alle ID's in alle tabellen in de tweede database.
Het is erg belangrijk dat het nummer moet groter zijn dan de grootste ID die al in beide databases bestaat!

Het is een beetje moeilijk uit te leggen, dus hier is een voorbeeld:

Laten we zeggen dat de grootste ID in een tabel in beide databases 8000 . is .
Vervolgens voer je een SQL uit die 10000 . toevoegt naar elke ID in elke tabel in de tweede database :

update Locations set Id = Id + 10000
update Persons set Id = Id + 10000, LocationId = LocationId + 10000
-- and so on, for each table

De query's zijn relatief eenvoudig, maar dit is het meeste werk omdat je voor elke tabel in de database handmatig zo'n query moet maken, met de juiste namen van alle ID-kolommen.

Na het uitvoeren van de query op de tweede database, zien de voorbeeldgegevens van uw vraag er als volgt uit:

Database 1: (precies zoals voorheen)

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

Database 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

En dat is het! Nu kunt u de gegevens van de ene database in de andere importeren, zonder enige schending van de primaire sleutel.



  1. Wat is het Oracle-equivalent van de functie IsNull() van SQL Server?

  2. Hoe waarden in een PHP-array invoegen in een MySQL-tabel?

  3. Mijn sql SELECT-instructie JOIN op drie tabellen

  4. Meerdere rangen in één tabel