两个相同数据库之间的数据迁移

问题描述 投票:0回答:1

我需要一些关于我遇到的问题的帮助。

我需要将数据从一个数据库(例如数据库1)迁移到另一个数据库(例如数据库2)。

两者具有相同的结构,但它们不在同一服务器中,并且服务器之间没有通信,最终根据客户端我可以在安装数据库2的服务器上恢复数据库1的备份。

问题是我有一堆带有身份种子列的表,它们的数据需要导出到数据库2,并且我维护了主表之间的关系。我的问题是,database2 也有相同的身份 ID,但数据不同。这是一个例子:

数据库1

表_客户
id = 1
姓名 = 约翰·伍德 ...

桌子_工作场所
id = 20
名称 = 欧洲

表关系
id_客户 = 1
id_worldplace = 20

数据库2

表_客户
id = 1
姓名=埃里克·布卢姆菲尔德
...

表关系
id_客户 = 1
id_worldplace = 20

桌子_工作场所
id = 20
名称 = 亚洲

我需要构建一个脚本来将这些表导入数据库2,有没有一种简单的方法来导入所有数据并防止数据丢失或关系破坏?

非常感谢和亲切的问候

sql-server sql-server-2008
1个回答
0
投票

您可以在目标表上将 IDENTITY_INSERT 设置为 ON,然后从源中插入记录,将 ID 增加一定数量。

假设我们有一个名为 Test01 的表,有 3 条记录,还有一个名为 Test02 的表,其结构相同但数据不同(除了 ID,两个表上的 ID 相同)。想要将Test02的数据添加到Test01中,我们可以在Test01上将IDENTITY_INSERT设置为ON,然后继续从Test02复制增加ID的记录。

在代码中,类似这样的事情:

CREATE TABLE Test01 (Id INT IDENTITY(1,1), SomeText VARCHAR(50))
CREATE TABLE Test02 (Id INT IDENTITY(1,1), SomeText VARCHAR(50))

INSERT INTO Test01(SomeText) VALUES('001'), ('002'), ('003')
INSERT INTO Test02(SomeText) VALUES('A'), ('B'), ('C')

SELECT * FROM Test01
SELECT * FROM Test02
GO

SET IDENTITY_INSERT Test01 ON
GO

INSERT INTO Test01(Id, SomeText) SELECT Id + 10000, SomeText FROM Test02
GO

SET IDENTITY_INSERT Test01 OFF
GO

SELECT * FROM Test01
SELECT * FROM Test02

DROP TABLE Test01
DROP TABLE Test02
GO

执行脚本将导致以下步骤:

样品

显然,ID 增加必须在所有相关表上进行,并为每个表指定相同的数量。不过,对于有大量桌子的情况,这种接近可能会让人不舒服。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.