Sql server T-SQL将行复制到同一个表和具有外键的另一个表
我正在使用Transact-SQL,例如,假设我有 表1Sql 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
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,而不是它复制的父行