我有一个临时表,其中包含需要插入两个不同表中的数据,临时定义为:
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来获取它。我想不出另一种正确链接数据的方法,将不胜感激
答案 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)
;