使用临时表数据更新第一个表,然后使用第一个表中的标识和相同的临时数据更新第二个表

时间:2018-11-20 20:29:19

标签: sql-server

我有一个临时表,其中包含需要插入两个不同表中的数据,临时定义为:

CREATE TABLE #PaymentHistory
    (
        amount INT,
        ImportantValue INT
    )

然后我有一个名为PaymentHistory的第一个表,定义为:

CREATE TABLE PaymentHistory
    (
        PaymentKey BIGINT IDENTITY,
        amount INT
    )

最后,我有另一个表SecondTable定义为:

CREATE TABLE SecondTable
    (
        PaymentKey INT,
        ImportantValue INT
    )

因此,我需要使用#PaymentHistory上的数据插入PaymentHistory上,然后使用PaymentKey字段中在该表上生成的标识使用PaymentPay标识和#PaymentHistory表上的ImportantValue插入SecondTable中

因此,唯一应以数据开头的表是#PaymentHistory,假设我在该表上有以下记录:

Amount          |      ImportantValue
10              |      2
15              |      5
9               |      21

因此,当我选择插入内容时,插入的最终结果应产生以下结果:

付款历史:

PaymentKey      |      Amount
1               |      10
2               |      15
3               |      9

第二张表:

PaymentKey      |      ImportantValue
1               |      2
2               |      5
3               |      21

我无法修改PaymentHistory表的架构,但是可以根据需要更改临时表或SecondTable

我尝试使用OUTPUT来获取身份和ImportantValue,但是由于ImportantValue在源表上,因此我无法使用OUTPUT来获取它。我想不出另一种正确链接数据的方法,将不胜感激

2 个答案:

答案 0 :(得分:1)

我会在插入之前在您的#PaymentHistory中添加一列...并找出第一个表的下一个val值

alter table #PaymentHistory
add ID bigint identity(1,1)

declare @i bigint = (select max(PaymentKey) from PaymentHistory)

现在请插入您的命令,

insert into PaymentHistory
select amount 
from #PaymentHistory
order by ID

并插入第二张表

insert into SecondTable
select PaymentKey, ImportantValue 
from PaymentHistory
inner join #PaymentHistory on #PaymentHistory.ID + @i = PaymentHistory.PaymentKey

答案 1 :(得分:0)

好吧,事实证明,我们团队中有人帮助我回答了这个问题,我将其张贴在这里,以防有人偶然发现此问题

merge  PaymentHistory
using  #PaymentHistory src
on            1 = 0
when not matched then
       insert (amount) values (amount)
output inserted.PaymentKey, src.ImportantValue 
into SecondTable (PaymentKey, ImportantValue)
;