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

批量插入记录时,如何将T_Sample的Scope Identity存入T_ScopeTab?

批量插入并捕获自增ID的实现方案

最优方案:使用OUTPUT子句批量处理

不需要用循环,SQL Server的OUTPUT子句可以在插入操作时直接捕获生成的自增ID(SampleID),并批量插入到T_ScopeTab表中,这种方式效率远高于循环处理。

具体语句如下:

INSERT INTO T_Sample(SampleData)
OUTPUT inserted.SampleID INTO T_ScopeTab(SampleID)
SELECT DATA FROM #temptab

说明:

  • OUTPUT inserted.SampleID:捕获插入到T_Sample后生成的自增主键值(SampleID)
  • INTO T_ScopeTab(SampleID):将捕获到的ID直接插入到目标表T_ScopeTab的对应字段中
  • 如果T_ScopeTab需要同时存储#temptab中的其他关联数据,可以调整语句为:
INSERT INTO T_Sample(SampleData)
OUTPUT inserted.SampleID, inserted.SampleData INTO T_ScopeTab(SampleID, SampleData)
SELECT DATA FROM #temptab

备选方案:使用游标循环处理(不推荐)

如果因为特殊业务需求必须用循环,可以通过游标遍历#temptab的每条数据,逐行插入后用SCOPE_IDENTITY()获取当前插入的ID,再插入到T_ScopeTab。这种方式仅适合小数据量场景,大数据量下性能较差。

示例代码:

DECLARE @Data VARCHAR(MAX)
DECLARE @NewID INT

-- 声明游标遍历临时表
DECLARE tempCursor CURSOR FOR
SELECT DATA FROM #temptab

OPEN tempCursor
FETCH NEXT FROM tempCursor INTO @Data

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 插入单条数据到T_Sample
    INSERT INTO T_Sample(SampleData) VALUES (@Data)
    -- 获取当前插入的自增ID
    SET @NewID = SCOPE_IDENTITY()
    -- 将ID插入到T_ScopeTab
    INSERT INTO T_ScopeTab(SampleID) VALUES (@NewID)

    FETCH NEXT FROM tempCursor INTO @Data
END

CLOSE tempCursor
DEALLOCATE tempCursor

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:35:33