SQL Server - Menyalin data dari satu database ke database lain - tabel yang identik, nilai identitas baru diperlukan

Begini'Masalahnya, saya telah menjalankan salinan identik situs web saya untuk dua wilayah geografis yang berbeda. Situs ini sekarang mendukung harga multi-mata uang jadi saya ingin menggabungkan kedua situs bersama-sama.

Semua tabel yang perlu saya gabungkan berbasis Identitas dan bodohnya tabel yang cocok di setiap salinan database diunggulkan pada nomor yang sama.

Apakah ada cara untuk menyalin data dari satu database ke database lain pada saat yang sama memberikan data salinan nilai identitas baru yang juga tercermin dalam nilai kunci asing dari tabel yang direferensikan?

yaitu.

Account
- Id
- Email
- FirstName
- etc

AccountImage
- Id
- Account_id
- FileName
- etc

Dan seterusnya...

Kecuali saya melewatkan sesuatu, masalah Anda bukan memindahkan data, melainkan berurusan dengan nilai identitas yang sudah diatur. Jika itu masalahnya maka cobalah ini.

  1. Pilih nilai yang lebih besar dari nilai identitas Anda saat ini pada salah satu DB. Saya akan memilih nilai bulat, katakanlah 1.000.000.
  2. Pilih nilai ident yang ingin Anda ubah (misalnya jika Anda memiliki tabel pencarian yang sama untuk kedua DB, maka Anda mungkin ingin membiarkannya tetap sama).
  3. Ketika Anda memindahkan data Anda, tambahkan nilai yang Anda pilih pada langkah 1 ke nilai idents yang ingin Anda ubah saat Anda memindahkannya.

Selama Anda konsisten dalam nilai yang Anda tambahkan semua hubungan Anda akan tetap sama ke dalam DB gabungan. Jadi misalnya

Anda memiliki tabel karyawan dengan id maksimal saat ini 200.000 di DB A dan 1.400.000 di DB B. Anda memutuskan untuk memindahkan data dari DB A ke DB B karena itu berarti memindahkan lebih sedikit data. Saat Anda memindahkan tabel karyawan Anda, Anda menambahkan 2.000.000 ke kolom Employee_Id.

USE DatabaseB
GO

SET IDENTITY_INSERT Employee ON

INSERT INTO Employee (Employee_Id, Other_Columns)
SELECT Employee_Id + 2000000, Other_Columns
FROM DatabaseA.dbo.Employee

SET IDENTITY_INSERT Employee OFF
GO

Dan saran terakhir, cadangkan semuanya sebelum Anda mulai jika Anda membuat kesalahan :)

Komentar (0)

JIKA kedua database server yang sama dan Anda memiliki izin untuk mengakses kedua database tersebut

Metode 1:

Anda dapat membuat skrip seluruh database utama dan menjalankannya dengan nama database baru, maka Anda akan memiliki skema dan data yang sama dari database utama (Mungkin dari SQL server 2008 Versi dan seterusnya)

Metode 2:

Jika Anda hanya membutuhkan beberapa tabel dengan skema, hubungan dan data maka skrip dari database utama

Ikuti hirarki tabel - 1. Tabel master 2. Tabel anak

  1. Skrip tabel skema
  2. Data tabel naskah
  3. Hubungan dan batasan tabel skrip

Jalankan dalam urutan yang sama

Metode 3:

Jika Anda hanya membutuhkan skema tabel dan data, maka pilih IMPORT/EXPORT

Komentar (2)

Mungkin cara termudah adalah dengan melakukan insert...select, mereferensikan ulang pada saat yang sama dengan menggunakan set identity_insert on dan menambahkan nilai tetap ke identitas yang ada untuk memastikan tidak ada konflik antara kumpulan data?

Sesuatu seperti ini:

set identity_insert myTable on

insert into db1.dbo.myTable
( identity_column, [column, column...] )
select identity_column+1000, [column, column...]
from db2.dbo.myTable

set identity_insert myTable off
Komentar (0)