Sql server T-SQL将行复制到同一个表和具有外键的另一个表

Sql server T-SQL将行复制到同一个表和具有外键的另一个表,sql-server,tsql,insert,copy,Sql Server,Tsql,Insert,Copy,我正在使用Transact-SQL,例如,假设我有 表1 ID_MAIN DATA 1 red 2 blue ID_MAIN DATA 1 red 2 blue 3 red 4 blue 表2 ID_SUB ID_MAIN TYPE 3 1 soft 4 2 rough ID_SUB ID_MAIN TYPE 3 1

我正在使用Transact-SQL,例如,假设我有

表1

ID_MAIN  DATA
1        red
2        blue
ID_MAIN  DATA
1        red
2        blue
3        red
4        blue
表2

ID_SUB  ID_MAIN  TYPE
3       1        soft
4       2        rough
ID_SUB  ID_MAIN  TYPE
3       1        soft
4       2        rough
5       3        soft
6       4        rough
…对于“TABLE_1”中的每个条目,我希望使用新的唯一id(主键)将其复制到“TABLE_1”,对于“TABLE_1”中的每个条目,我还希望使用新id复制“TABLE_2”中引用它(外键)的条目

表1

ID_MAIN  DATA
1        red
2        blue
ID_MAIN  DATA
1        red
2        blue
3        red
4        blue
表2

ID_SUB  ID_MAIN  TYPE
3       1        soft
4       2        rough
ID_SUB  ID_MAIN  TYPE
3       1        soft
4       2        rough
5       3        soft
6       4        rough
我了解如何复制条目并更改某些字段

INSERT INTO TABLE_1 (ID_MAIN, DATA)
    SELECT NEWID(), DATA
    FROM TABLE_1
我的问题更倾向于如何迭代
表1
中的每个条目,用新ID复制条目,并在每个条目的基础上向引用表1中ID的
表2
添加新行

希望这是有意义的,不确定它是否对我有意义哈哈


谢谢你的帮助

如果我知道你想要的是:

INSERT INTO
    Table_2
    (
      table_2_id
      , table_1_id
      , type
    )
SELECT
    table_2_id = ROW_NUMBER() OVER (ORDER BY a.table_1_id)
    , table_1_id = a.table_1_id
    , type
      CASE
        WHEN a.data = 'red' THEN 'soft'
        WHEN a.data = 'blue' THEN 'rough'
      END
FROM
    table_1 a

这将获取表1中的所有记录,将它们插入表2中,根据表1数据列分配类型,并增加表2的ID。

是表1.ID\u主标识字段还是表2.ID\u子标识字段(这意味着您不必有意插入下一个值),或者(意味着您必须做一些数学运算才能有意插入下一个值)@JimHorn TABLE_1.ID_MAIN和TABLE_2.ID_SUB是使用newid()创建的uniqueidentifier类型。因此,它们只是标识字段。抱歉,但这不是我想要完成的。例如,数据和类型字段只是占位符。我更关心的是复制两个表中的每一行,但维护每个表中两个条目之间的关系。因此,如果表2中的第1行是ta中第1行的外键表1我想为各自的副本保持这种关系,唯一的区别是第1行副本将具有不同的uniqueidentifier。因此,如果我们进行了复制,那么表2中的第2行将包含表1中第2行的外键,但表1中的第2行将具有不同的uniqueidentifier,而不是它复制的父行