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 |