sql >> Databasteknik >  >> RDS >> Sqlserver

Hur slår man ihop två identiska databasdata till en?

Du säger att båda kunderna använder din applikation, så jag antar att det är någon form av "shrink-wrap"-programvara som används av fler kunder än bara dessa två, eller hur?

Om ja, att lägga till speciella kolumner i tabellerna eller något liknande kommer förmodligen att orsaka smärta i framtiden, eftersom du antingen måste ha en specialversion för dessa två kunder som kan hantera de ytterligare kolumnerna. Eller så måste du introducera dessa kolumner i din huvudkodbas, vilket innebär att alla dina andra kunder också skulle få dem.

Jag kan komma på ett enklare sätt att göra detta utan att ändra någon av dina tabeller eller lägga till några kolumner.
För att detta ska fungera måste du ta reda på det största ID som finns i båda databaserna tillsammans ( oavsett i vilken tabell eller i vilken databas det är) .

Detta kan kräva lite kopiering och inklistring för att få många frågor som ser ut så här:

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

När du hittar det största ID:t efter att ha kört frågan i båda databaserna, ta ett nummer som är större än det ID:n och lägg till det till alla ID:n i alla tabeller i den andra databasen.
Det är mycket viktigt att antalet måste vara större än det största ID som redan finns i båda databaserna!

Det är lite svårt att förklara, så här är ett exempel:

Låt oss säga att det största ID:t i någon tabell i båda databaserna är 8000 .
Då kör du lite SQL som lägger till 10000 till varje ID i varje tabell i den andra databasen :

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

Frågorna är relativt enkla, men det här är det mesta arbetet eftersom du måste bygga en fråga som denna manuellt för varje tabell i databasen, med de korrekta namnen på alla ID-kolumner.

Efter att ha kört frågan på den andra databasen kommer exempeldata från din fråga att se ut så här:

Databas 1: (exakt som tidigare)

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

Databas 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

Och det är allt! Nu kan du importera data från en databas till den andra, utan att få några primärnyckelöverträdelser alls.



  1. Hur man kör ett .sql-skript från bash

  2. T-SQL Hur man beviljar roll till användare

  3. Laravel:Få objekt från samling efter attribut

  4. Hur man döljer en aliaskolumn i mysql EDITED