SQL获取旧值映射和新值映射

时间:2018-11-26 16:51:40

标签: sql sql-server oracle

请考虑下表

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中实现此目标的最佳方法是什么?以编程方式还是在查询中?无需进行任何表格更改。

我尝试了以下方法,但是不可能

Oracle

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;

SQL服务器

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 

1 个答案:

答案 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