这是另一种方法:
只需IDMap
向目标数据库表中添加一列,根据连接插入相关表到IDMap
.
例如对于表
CREATE TABLE db1.dbo.Parent
(
Id int identity,
description varchar(max),
PRIMARY KEY(Id)
)
CREATE TABLE db1.dbo.Child
(
Id int identity,
ParentId int NOT NULL,
SomeChar char(1),
PRIMARY KEY(Id),
FOREIGN KEY(ParentId) REFERENCES db1.dbo.Parent(Id)
)
CREATE TABLE db2.dbo.Parent
(
Id int identity,
description varchar(max),
PRIMARY KEY(Id)
)
CREATE TABLE db2.dbo.Child
(
Id int identity,
ParentId int NOT NULL,
SomeChar char(1),
PRIMARY KEY(Id),
FOREIGN KEY(ParentId) REFERENCES db2.dbo.Parent(Id)
)
您的导入脚本可能是:
ALTER TABLE db2.dbo.Parent ADD IDMap INT
--might consider adding an index for performance, might help, might hurt.
GO
INSERT INTO db2.dbo.Parent (description, IDMap)
SELECT description, Id FROM db1.dbo.Parent
INSERT INTO db2.dbo.Child (ParentId, SomeChar)
SELECT db2.dbo.Parent.Id, db1.dbo.Child.SomeChar
FROM db1.dbo.Child
INNER JOIN db2.dbo.Parent ON db2.dbo.Parent.IDMap = db1.dbo.Child.ParentId
这是一个演示上述内容的SQL Fiddle(由于 sql fiddle 限制,严格来说不是跨数据库,但应该给你这个想法。)
然后,您可以删除该IDMap
列,或者如果您希望将其保留以供后代使用。