首页 > 解决方案 > 将两个表中的相关行复制到 SQL 中具有新值的相同表中?

问题描述

我有两个表,“table1”和“table2”。它们包含彼此相关的行。表“table2”有成对的行和名为“table1_id”的列,这些对引用“table1”中的连续“id”列。

需要执行的任务是我需要从两个表中复制行并将这些行放入具有新数据的同一个表中,同时保持它们之间的关系。

我已经阅读了 StackOverflow 上的几篇文章和“mssqltips.com”上的一些文章,但我仍然不确定我应该如何做到这一点。我应该使用带有连接和临时表的游标还是查询?完成上述任务的最佳实践方法是什么,如果可能的话,你能展示一个简短的例子吗?

标签: sqlsql-server

解决方案


如果id列正在被复制并且确实是一个 ID(唯一键),则不能逐字“复制两个表中的两行并将它们放入同一个表中”。如果您想将其他一些(非键)列复制到具有新 ID 的新行中,那很好。如果这是您想要的,您可以先创建主键 (table1) 行,然后引用新创建的键。如何执行此操作取决于该id列是生成的键还是显式指定的键,以及您是否还有任何键(主键或外键)table2

它可能看起来像这样:

insert into table1
select col1, col2, etc
from table1
where id = 'somekey'

insert into table2
select 'newkey' as table1_id, col3, col4, etc
from table2
where table1_id = 'somekey'

如果您想以原子方式执行此操作,请将其包装在 abegin transaction中,并使用OUTPUT子句或类似内容来收集新 ID;请参阅有关此的文档


推荐阅读