Sql Server - 在一个表中插入数据以及另一个表的新的自动递增插入ID

时间:2014-05-12 06:32:11

标签: sql-server bulkinsert sqlbulkcopy

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

例如:

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:

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

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

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

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

请指导我怎么做。 感谢。

1 个答案:

答案 0 :(得分:0)

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

这是sql:

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