You need to enable JavaScript to run this app. SQL通过SELECT插入行后将目标表新ID更新到源表的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

SQL通过SELECT插入行后将目标表新ID更新到源表的实现问题

解决方案

可以通过SQL Server的MERGE语句配合OUTPUT子句实现需求,核心逻辑是利用MERGE可以同时访问源表、目标表字段的特性,把插入生成的自增ID和原SourceTable的主键ID做映射,再回写更新,完全不受业务字段重复的影响。

完整实现代码

-- 声明表变量存储映射关系:SourceTable的Id <-> TargetTable新生成的Id
DECLARE @IdMapping TABLE (
    SourceId INT,
    NewTargetId INT
)

-- 用MERGE执行插入,同时生成映射关系
MERGE #TargetTable t
USING #SourceTable s
ON 1=0 -- 恒假条件,所有源表行都会走INSERT逻辑,等效于直接插入
WHEN NOT MATCHED THEN
    INSERT (Field1, Field2)
    VALUES (s.Field1, s.Field2)
OUTPUT s.Id, inserted.Id INTO @IdMapping(SourceId, NewTargetId);

-- 用映射表回写SourceTable的TargetTableId字段
UPDATE s
SET s.TargetTableId = m.NewTargetId
FROM #SourceTable s
INNER JOIN @IdMapping m ON s.Id = m.SourceId

-- 验证结果
SELECT * FROM #SourceTable

执行后#SourceTable输出结果

Id  Field1     Field2  TargetTableId
1   Apple      Pie     245
2   Chocolate  Cake    246
3   Apple      Pie     247

内容的提问来源于stack exchange,提问作者Measel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 16:09:03