批量插入记录时,如何将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
相关产品推荐
相关产品推荐

