关于批量插入:Sql Server – 在一个表中插入数据以及另一个表的新的自动增量插入 id

Sql Server - Insert data in one table along with the new auto-incremented inserted ids of another table

我有 2 个数据库 DB1 和 DB2。我需要编写查询将数据从 DB2 复制到 DB1。
两个数据库具有相同的表结构。

例如:

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE DB1.Group(
GroupID [int] IDENTITY(1,1) NOT NULL,
[Company] [varchar](10) NOT NULL,
[Description] [varchar](1000) NOT NULL
  )    

 CREATE TABLE DB1.Instance(
[InstanceID] [int] IDENTITY(1,1) NOT NULL,
[Description] [varchar](1000) NOT NULL,
[GroupID] [int] NOT NULL,
 )

我从 DB2.Group 读取数据并将其插入 DB1.Group :

1
2
 Insert into DB1.Group (Company,Description)
 select Company,Description from DB2.Group

GroupID 在 DB1 中自动递增。而且这个我不想关闭,因为会与现有数据冲突。

现在,在将数据插入 DB1.Instance 时,我需要提供 DB1.Group 表的新的自动递增插入 ID (GroupID)

1
2
Insert into DB1.Instance (Description,GroupID)
select Description, GroupID from DB2.Instance

请指导我如何做到这一点。
谢谢。


使用新键插入您的第一个表(插入时将 pk 留空)并在 DB1 表中为旧键创建一个(临时)col。在旧键列上查找(加入)您的第二次插入以获得新的 fk。完成后删除旧键列和完成。

这里是 sql:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE DB1.Group(
GroupID [int] IDENTITY(1,1) NOT NULL,
[Company] [varchar](10) NOT NULL,
[Description] [varchar](1000) NOT NULL,
[old_key] [int]
  )    

 CREATE TABLE DB1.Instance(
[InstanceID] [int] IDENTITY(1,1) NOT NULL,
[Description] [varchar](1000) NOT NULL,
[GroupID] [int] NOT NULL,
 )

 Insert into DB1.Group (Company,Description, old_key)
 select Company,Description,GroupID  from DB2.Group

 Insert into DB1.Instance (Description,GroupID)
select Description, DB1.Group.GroupID
from DB2.Instance join DB1.Group ON DB1.Group.old_key = DB2.Instance.GroupID

ALTER TABLE DB1.Group DROP COLUMN old_key