Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak połączyć dwie identyczne dane z bazy danych w jedno?

Mówisz, że obaj klienci korzystają z Twojej aplikacji, więc zakładam, że jest to oprogramowanie typu „shrink-wrap”, z którego korzysta więcej klientów niż tylko tych dwóch, prawda?

Jeśli tak, dodawanie do tabel specjalnych kolumn lub coś w tym rodzaju prawdopodobnie sprawi ból w przyszłości, ponieważ albo będziesz musiał utrzymywać specjalną wersję dla tych dwóch klientów, która może poradzić sobie z dodatkowymi kolumnami. Lub musiałbyś wprowadzić te kolumny do głównej bazy kodu, co oznacza, że ​​wszyscy Twoi inni klienci również je otrzymają.

Mogę wymyślić prostszy sposób na zrobienie tego bez zmiany żadnej z twoich tabel lub dodawania jakichkolwiek kolumn.
Aby to zadziałało, musisz znaleźć największy identyfikator, który istnieje w obu bazach danych razem ( bez względu na tabelę lub bazę danych) .

Może to wymagać kopiowania i wklejania, aby uzyskać wiele zapytań, które wyglądają tak:

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

Gdy znajdziesz największy identyfikator po uruchomieniu zapytania w obu bazach danych, weź liczbę większą niż ten identyfikator i dodaj ją do wszystkich identyfikatorów we wszystkich tabelach w drugiej bazie danych.
Bardzo ważne jest, aby liczba musi być większy niż największy identyfikator, który już istnieje w obu bazach danych!

Trudno to wyjaśnić, więc oto przykład:

Załóżmy, że największy identyfikator w dowolnej tabeli w obu bazach danych to 8000 .
Następnie uruchamiasz SQL, który dodaje 10000 do każdego identyfikatora w każdej tabeli w drugiej bazie danych :

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

Zapytania są stosunkowo proste, ale jest to najbardziej pracochłonne, ponieważ takie zapytanie musisz zbudować ręcznie dla każdej tabeli w bazie danych, z poprawnymi nazwami wszystkich kolumn ID.

Po uruchomieniu zapytania w drugiej bazie danych przykładowe dane z Twojego pytania będą wyglądać tak:

Baza danych 1: (dokładnie tak jak wcześniej)

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

Baza danych 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

I to wszystko! Teraz możesz importować dane z jednej bazy danych do drugiej, bez żadnych naruszeń klucza podstawowego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rekurencyjne CTE w celu znalezienia rekordów nadrzędnych

  2. Jak obliczyć sumę bieżącą w SQL bez użycia kursora?

  3. Jak pobrać część czasu z daty i godziny programu SQL Server 2005 w formacie „GG:mm tt”?

  4. Zapytanie Linq nie działa zgodnie z oczekiwaniami

  5. Jak pogrupować według dat każdego tygodnia do ostatnich sześciu tygodni w niedziele w sql?