我试图通过块数据获得块,但是低于错误:
将表达式转换为数据类型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
。
任何人都可以帮助我
答案 0 :(得分:3)
我认为问题出在OFFSET
计算中:
LinkedColumn OFFSET ((100001 - 1) * 100000 )
这将抵消10,000,000,000行,这几乎不是你想要的。
我认为应该是
LinkedColumn OFFSET ((2 - 1) * 100000 )
在每次迭代中,数字应增加1而不是chunkSize
。所以你可能正在使用curCount
变量,它应该递增(curCount++
)。