Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để hợp nhất hai dữ liệu cơ sở dữ liệu giống nhau thành một?

Bạn nói rằng cả hai khách hàng đều đang sử dụng ứng dụng của bạn, vì vậy tôi giả định rằng đó là một loại phần mềm "thu nhỏ" được nhiều khách hàng sử dụng hơn chỉ hai loại này, đúng không?

Nếu có, việc thêm các cột đặc biệt vào bảng hoặc bất cứ thứ gì tương tự có thể sẽ gây khó khăn trong tương lai, bởi vì bạn sẽ phải duy trì một phiên bản đặc biệt cho hai khách hàng này có thể xử lý các cột bổ sung. Hoặc bạn sẽ phải giới thiệu các cột này với cơ sở mã chính của mình, điều đó có nghĩa là tất cả các khách hàng khác của bạn cũng sẽ nhận được chúng.

Tôi có thể nghĩ ra một cách dễ dàng hơn để thực hiện việc này mà không cần thay đổi bất kỳ bảng nào của bạn hoặc thêm bất kỳ cột nào.
Để điều này hoạt động, bạn cần tìm ra ID lớn nhất tồn tại trong cả hai cơ sở dữ liệu cùng nhau ( không có vấn đề trong bảng nào hoặc trong cơ sở dữ liệu nào) .

Điều này có thể yêu cầu một số bản sao và dán để nhận được nhiều truy vấn giống như sau:

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

Khi bạn tìm thấy ID lớn nhất sau khi chạy truy vấn trong cả hai cơ sở dữ liệu, hãy lấy một số lớn hơn ID đó và thêm nó vào tất cả các ID trong tất cả các bảng trong cơ sở dữ liệu thứ hai.
Điều rất quan trọng là số cần lớn hơn ID lớn nhất đã tồn tại trong cả hai cơ sở dữ liệu!

Có một chút khó khăn để giải thích, vì vậy đây là một ví dụ:

Giả sử rằng ID lớn nhất trong bất kỳ bảng nào trong cả hai cơ sở dữ liệu là 8000 .
Sau đó, bạn chạy một số SQL có thêm 10000 đến mọi ID trong mọi bảng trong cơ sở dữ liệu thứ hai :

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

Các truy vấn tương đối đơn giản, nhưng đây là công việc khó nhất vì bạn phải tạo một truy vấn như thế này theo cách thủ công cho mỗi bảng trong cơ sở dữ liệu, với tên chính xác của tất cả các cột ID.

Sau khi chạy truy vấn trên cơ sở dữ liệu thứ hai, dữ liệu mẫu từ câu hỏi của bạn sẽ giống như sau:

Cơ sở dữ liệu 1: (giống hệt như trước đây)

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

Cơ sở dữ liệu 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

Và đó là nó! Giờ đây, bạn có thể nhập dữ liệu từ cơ sở dữ liệu này vào cơ sở dữ liệu khác mà không gặp phải bất kỳ vi phạm khóa chính nào.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các giao dịch nên được xử lý trong .NET hoặc SQL Server?

  2. Truy vấn chuyển đổi số mũ thành số trôi nổi trong SQL Server

  3. SELECT COUNT (cột) có nhanh hơn / chậm hơn SELECT COUNT (*) không?

  4. Khởi động EF cực kỳ chậm - 15 phút

  5. Đổi tên bảng trong SQL Server (T-SQL)