我有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
请指导我怎么做。 感谢。
答案 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