SQL Server - 将数据从一个数据库复制到另一个数据库 - 相同的表,需要新的标识值

Jor*_*dan 4 sql-server bulkcopy identity merge

事情就是这样,我一直在为两个不同的地理区域运行相同的网站副本。该站点现在支持多币种定价,因此我想将两个站点合并在一起。

我需要合并的所有表都是基于身份的,而且愚蠢的是,数据库的每个副本中的匹配表都以相同的数字播种。

有没有办法将数据从一个数据库复制到另一个数据库,同时为复制数据提供新的标识值,这些值也反映在引用表的外键值中?

IE

Account
- Id
- Email
- FirstName
- etc

AccountImage
- Id
- Account_id
- FileName
- etc
Run Code Online (Sandbox Code Playgroud)

等等..

Ken*_*her 8

除非我遗漏了什么,否则您的问题不是移动数据,而是处理已经设置的身份值。如果是这种情况,那么试试这个。

  1. 在任一数据库上选择一个大于您当前 ident 值的值。我会选择一个整数值,比如 1,000,000。
  2. 选择您想要更改的 ident 值(例如,如果您有两个数据库相同的查找表,那么您可能希望它们保持不变。)
  3. 移动数据时,将您在步骤 1 中选择的值添加到移动时要更改的 idents 值。

只要您在添加的值上保持一致,您的所有关系都会在组合数据库中保持不变。所以例如

您有一个员工表,其当前最大 id 为 200,000,在 DB A 中为 200,000,在 DB B 中为 1,400,000。您决定将数据从 DB A 移动到 DB B,因为这意味着移动的数据更少。当您移动您的员工表时,您将 2,000,000 添加到 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
Run Code Online (Sandbox Code Playgroud)

最后一条建议在您开始之前备份所有内容,以防您犯错:)