请考虑下表
Create table t1 (n1 number identity, v1 varchar);
Create table t2 (n1 number identity, v1 varchar);
两个表中的N1是标识列
表t1值如下
| N1 | V1 |
|--------|---------|
| 1 | A |
| 2 | B |
| 3 | C |
-------------------
现在,当我将T1表值插入T2时,我需要收集T1.N1和T2.N1之间的映射
旧的N1身份值和新的N1身份值的映射。
说,如果在T2中的标识值是按以下方式创建的,那么我需要知道什么是与旧T1.N1值相对应的新T2.N1值。
| N1 | V1 |
|--------|---------|
| 6 | A |
| 7 | B |
| 8 | C |
-------------------
Old N1 = 1, New N1 = 6
Old N1 = 2, New N1 = 7
Old N1 = 3, New N1 = 8
在Oracle和MS SQL Server中实现此目标的最佳方法是什么?以编程方式还是在查询中?无需进行任何表格更改。
我尝试了以下方法,但是不可能
Create type mapping_object is object (n1 number, n2 number);
Create type mapping_tab is table of mapping_object;
Insert into T2 (v1)
select v1 from T1
returning T2.n1, T1.n1 bulk collect into mapping_tab;
Declare @mapping_tab is table (n1 int, n2 int)
Insert into T2 (v1)
Output inserted.n1, T1.n1 into @mapping_tab
Select v1 from T1
答案 0 :(得分:0)
我会在t2处添加一个新字段以保持表之间的链接,还允许您设置外键约束。
Create table t2 (n1 number identity, v1 varchar, t1_n1 number);
然后做
Insert into T2 (v1, t1_n1)
Select v1, n1 from T1