Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menggabungkan dua data database yang identik menjadi satu?

Anda mengatakan bahwa kedua pelanggan menggunakan aplikasi Anda, jadi saya berasumsi bahwa itu semacam perangkat lunak "shrink-wrap" yang digunakan oleh lebih banyak pelanggan daripada hanya dua ini, benar?

Jika ya, menambahkan kolom khusus ke tabel atau semacamnya mungkin akan menimbulkan masalah di masa mendatang, karena Anda juga harus mempertahankan versi khusus untuk dua pelanggan ini yang dapat menangani kolom tambahan. Atau Anda harus memperkenalkan kolom ini ke basis kode utama Anda, yang berarti bahwa semua pelanggan Anda yang lain juga akan mendapatkannya.

Saya dapat memikirkan cara yang lebih mudah untuk melakukan ini tanpa mengubah tabel Anda atau menambahkan kolom apa pun.
Agar ini berfungsi, Anda perlu mencari ID terbesar yang ada di kedua database secara bersamaan ( tidak peduli di tabel mana atau di database mana itu) .

Ini mungkin memerlukan beberapa salin &tempel untuk mendapatkan banyak kueri yang terlihat seperti ini:

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

Saat Anda menemukan ID terbesar setelah menjalankan kueri di kedua database, ambil angka yang lebih besar dari ID tersebut, dan tambahkan ke semua ID di semua tabel di database kedua.
Sangat penting bahwa nomor tersebut harus lebih besar dari ID terbesar yang sudah ada di kedua database!

Agak sulit untuk dijelaskan, jadi ini contohnya:

Katakanlah ID terbesar di tabel mana pun di kedua database adalah 8000 .
Kemudian Anda menjalankan beberapa SQL yang menambahkan 10000 ke setiap ID di setiap tabel di database kedua :

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

Kuerinya relatif sederhana, tetapi ini adalah yang paling berhasil karena Anda harus membuat kueri seperti ini secara manual untuk setiap tabel dalam database, dengan nama yang benar untuk semua kolom ID.

Setelah menjalankan query pada database kedua, contoh data dari pertanyaan Anda akan terlihat seperti ini:

Basis Data 1: (persis seperti sebelumnya)

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

Basis Data 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

Dan itu saja! Sekarang Anda dapat mengimpor data dari satu database ke database lainnya, tanpa mendapatkan pelanggaran kunci utama sama sekali.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memberi tahu layanan windows (c #) tentang Perubahan Tabel DB (sql 2005)?

  2. Mendeteksi tanggal NULL dan menampilkan string kosong di SSRS

  3. Urutan vs identitas

  4. Kesalahan JDBC SQL Server di Java 8:Pengandar tidak dapat membuat sambungan aman ke SQL Server dengan menggunakan enkripsi Secure Sockets Layer (SSL)

  5. Perbarui Kueri di SQL Server melalui GABUNG