SQL 使用新的外键复制数据

SQL copying data with new foreign keys

我这里有一个非常棘手的问题。 我有两个 table。一个通过外键依赖于另一个。 Table 1

Table1ID 实例 ID 修改者
1 1 是的
2 1 是的
3 1 是的

Table 2

ID 实例 ID Table1ID
1 1 1
2 1 2
3 1 3

这些被用作名为“场景”的东西的数据集。 当有人创建新场景时,它会触发两个存储过程 - 一个用于 Table1,另一个用于 Table2,它们基本上是在具有新实例 ID 的同一 table 中复制此数据。这就是我们遇到问题的地方。 Table1 将自动递增它的键,但 Table2 将保留新实例的旧外键,如下所示

Table 1

Table1ID 实例 ID 修改者
1 1 是的
2 1 是的
3 1 是的
4 2 是的
5 2 是的
6 2 是的

Table 2

ID 实例 ID Table1ID
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 2 3

如何使用 Table1 中的新 ID 设置 Table1ID?

你说你有两个存储过程。但是对于这样的同步逻辑,您应该在同一个存储过程中进行。

在该过程中,当插入到table 1 时,使用output 捕获那些新插入的记录。这些结果将为您提供插入的主键,您又将其泵入 table 2.

create table #newRecords (table1id int, [instance id] int);

insert      table1
output      inserted.Table1ID, inserted.[Instance ID] into #newRecords
select      [instance id], modifiedBy 
from        table1;

insert      table2
select      nr.[instance id], nr.table1id
from        #newRecords nr;

您的 table 2 结果如下:

ID Instance ID Table1ID
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
6 1 6