分页时算术溢出错误
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