SQL中使用Fetch能否返回多组数据?如何分批处理5万条表数据?
分批处理SQL的问题解答
你给出的这条SQL仅会返回前10000条记录——因为它的OFFSET 0 ROWS是固定值,只会跳过0条数据,然后取接下来的10000条,不会自动遍历剩余的记录。
要实现分批处理完所有50000条记录,你需要动态调整OFFSET的值,每次执行SQL时把OFFSET增加10000,直到某次查询返回的记录数不足10000条(或为空),就说明所有数据都处理完毕了。
举个例子,第二次处理的SQL应该是这样:
SELECT "field-1", "field-2", "field-3", "field-4" FROM table1 WHERE table1."sort-field" = 'TEST' ORDER BY table1."grouping-field" ASC OFFSET 10000 ROWS FETCH NEXT 10000 ROWS ONLY
另外注意原SQL里的小错误:ORDER BY table."grouping-field"中的table应该改为table1,否则会出现表名引用错误。
如果是在程序中处理,可以用循环逻辑:每次执行SQL后更新OFFSET的值(比如从0→10000→20000…),直到查询结果为空;如果是用数据库脚本(比如存储过程),也可以编写自动循环的逻辑来完成分批处理。
内容的提问来源于stack exchange,提问作者O_Cyrus
相关产品推荐
相关产品推荐

