You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量插入Invoice数据时,如何获取所有插入行的标识值并填充临时表

高效批量回填插入生成的主键到临时表

在SQL Server中,OUTPUT子句是解决这类批量插入后获取并回填主键的最优方案,完全满足海量数据场景的高效需求,无需逐行循环。

实现步骤

利用INSERT...OUTPUT捕获插入到Invoice表的所有主键值,同时保留原临时表的关联标识(这里用RowNumber,需确保它是唯一值),最后通过关联更新将主键回填到#InvoiceItems的InvoiceID列。

具体代码

-- 声明表变量用于存储插入的主键和对应的RowNumber
DECLARE @InsertedInvoices TABLE (RowNumber INT, NewInvoiceID INT);

-- 批量插入并捕获主键
INSERT INTO [Invoice] (SaleID, BuyerID /* 替换为Invoice表实际需要的列 */)
OUTPUT src.RowNumber, inserted.InvoiceID INTO @InsertedInvoices
SELECT RowNumber, SaleID, BuyerID /* 与Invoice表列顺序对应 */
FROM #InvoiceItems AS src;

-- 回填主键到临时表
UPDATE tgt
SET tgt.InvoiceID = ins.NewInvoiceID
FROM #InvoiceItems AS tgt
JOIN @InsertedInvoices AS ins ON tgt.RowNumber = ins.RowNumber;

关键说明

  • OUTPUT子句可直接捕获插入操作生成的所有主键(inserted.InvoiceID),同时通过src.RowNumber将原临时表的唯一标识同步到表变量,建立可靠的关联关系。
  • 整个过程为纯批量操作,性能与普通批量插入几乎无差异,完全适配海量数据场景。
  • 必须保证#InvoiceItems的RowNumber列是唯一值,否则关联更新会出现结果错误或数据混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:15:16