分页时算术溢出错误

时间:2018-02-13 10:22:59

标签: c# sql sql-server pagination

我试图通过块数据获得块,但是低于错误:

  

将表达式转换为数据类型int的算术溢出错误。

代码:

int chunkSize = 100000;
 int curCount = 1;
 while (true)
 {
    var data = Get("Connectionstring",
        "select Id as LinkedColumn,CompareColumn from Source order by 
         LinkedColumn" + " OFFSET ((" + curCount + " - 1) * " + chunkSize + " 
         ) ROWS FETCH NEXT " + chunkSize + " ROWS ONLY;");

   if (data.Count == 0) break;
   curCount += chunkSize;
 }

以上版本适用于first iteration

select Id as LinkedColumn,CompareColumn from Source order by 
   LinkedColumn OFFSET ((1 - 1) * 100000 ) ROWS FETCH NEXT 100000 ROWS ONLY;

但我收到second iteration的错误:

select Id as LinkedColumn,CompareColumn from Source order by
   LinkedColumn OFFSET ((100001 - 1) * 100000 ) ROWS FETCH NEXT 100000 ROWS ONLY;

当我在sql server management studio中运行上面的查询时,我得到了同样的错误。

我不知道这里的问题是什么。

this上的答案与insert command

相关

任何人都可以帮助我

1 个答案:

答案 0 :(得分:3)

我认为问题出在OFFSET计算中:

LinkedColumn OFFSET ((100001 - 1) * 100000 )

这将抵消10,000,000,000行,这几乎不是你想要的。

我认为应该是

LinkedColumn OFFSET ((2 - 1) * 100000 )

在每次迭代中,数字应增加1而不是chunkSize。所以你可能正在使用curCount变量,它应该递增(curCount++)。