首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将批量插入收缩为基于循环的插入。

将批量插入收缩为基于循环的插入。
EN

Stack Overflow用户
提问于 2012-07-19 07:10:21
回答 1查看 122关注 0票数 0

希望将这段SQL查询更改为循环版本,该版本可以在每次迭代时由Select-Insert记录的1000个条目

在每次迭代中,都希望获得一个打印,以查看最后插入的项目是什么。

代码:

代码语言:javascript
复制
INSERT INTO [tData2]
(
    [Key], 
    Info1,
    Info2
)
SELECT 
    [Key], --the Id
    Info1,
    Info2
FROM
    [tData]

编辑:

(还有其他限制插入的条件,这些条件与问题无关)

大容量插入逻辑不会被更改,只是缩小要插入的数据库片段.我们没有插入整个表,而是在每次迭代中批量插入10000项,并且可以得到一个简单的报告。

非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 07:53:50

下面是一些示例代码,我很快将它们放在一起,供您进行实验。这不使用游标(相反,使用while ),但您也可以这样构建它。您可以进行一些性能优化,但只有您可以判断。YMMV

代码语言:javascript
复制
    set nocount on

/* mock up source/dest tables */
declare @src table (id int, value varchar(max));
declare @dest table (id int, value varchar(max));

/* fill source with some data */
declare @rownum int;
set @rownum=0;
while (@rownum<5000) begin
    insert into @src select @rownum,'test value ' + CONVERT(varchar(25),@rownum);
    select @rownum=@rownum+1;
end

/* laod batched data */
declare @pagesize int;set @pagesize=1000;
declare @rowlow int;set @rowlow=0;
declare @rowmax int;set @rowmax=@pagesize;

declare @ct int;select @ct = COUNT(*) from @src;
declare @id int;
declare @value varchar(max);

while (@rowmax<=@ct) begin

    WITH result_set AS (
      SELECT ROW_NUMBER() OVER (ORDER BY id) AS [row_number], id,value
      FROM @src  
    ) insert into @dest 
        SELECT id,value FROM result_set
        WHERE [row_number] BETWEEN @rowlow AND @rowmax

    -- Output
    print 'Copied rows ' + convert(varchar(25),@rowlow) + ' to ' + convert(varchar(25),@rowmax)     

    -- Increment batch counters
    select @rowlow=@rowmax+1,@rowmax+=@pagesize;
end

select * from @dest
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11555629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档