我需要一些关于我遇到的问题的帮助。
我需要将数据从一个数据库(例如数据库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,有没有一种简单的方法来导入所有数据并防止数据丢失或关系破坏?
非常感谢和亲切的问候
您可以在目标表上将 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 增加必须在所有相关表上进行,并为每个表指定相同的数量。不过,对于有大量桌子的情况,这种接近可能会让人不舒服。
希望这有帮助。