分页时算术溢出错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分页时算术溢出错误相关的知识,希望对你有一定的参考价值。

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

将表达式转换为数据类型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有关。

任何人都可以帮助我

答案

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

LinkedColumn OFFSET ((100001 - 1) * 100000 )

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

我认为应该是

LinkedColumn OFFSET ((2 - 1) * 100000 )

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

以上是关于分页时算术溢出错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SQL Server 在将 int 转换为数据类型 numeric 时抛出算术溢出错误?

SQL Server 算术溢出错误 - 将 nvarchar 转换为 datetime

类型varchar值= 770214566.000000000的算术溢出错误

货币类型的算术溢出错误

当我使用它与db2进行分页时,我的下一页是错误的

CAST/CONVERT 问题 算术溢出错误