我们从外部源获取Access DB(.accdb),并且无法控制结构或数据。我们需要使用代码将数据摄取到我们的数据库中。这意味着我可以控制SQL。
我们的问题是,一个表包含近13k条记录(目前为12,997条),需要很长时间才能处理。我想查询来自源数据库的数据,但一次只查询预定义数量的记录 - 比如说一次1000个。
我尝试在循环中生成查询,我在每个循环中更新要返回的记录的数量。到目前为止,我发现接近工作的唯一事情就是这样:
SELECT *
FROM (
SELECT Top + pageSize + sub.*
FROM (
SELECT TOP + startPos + [Product Description Codes].*
FROM [Product Description Codes]
ORDER BY [Product Description Codes].PRODDESCRIPCODE
) sub
ORDER BY sub.PRODDESCRIPCODE DESC
) subOrdered
ORDER BY subOrdered.PRODDESCRIPCODE
我在每个循环中递增 pageSize 和 startPos 。问题是 总是 返回1000行,即使我认为它应该是最后一个循环,它应该只返回997,然后返回零。
任何人都可以帮我吗?我没有其他专栏要过滤。有没有办法在循环中选择一定数量的记录然后递增该数字,直到我获得所有记录,然后停止?
答案 0 :(得分:0)
如果PRODDESCRIPCODE是主键,那么您可以简化选择。即:
选择TOP 1000 * FROM [产品描述代码] 其中PRODDESCRIPCODE> @pcode;
并从传递@pcode参数0开始(如果是int,或者'',如果文本等)。在下一个循环中,您可以将参数设置为您收到的最大PRODDESCRIPCODE。
(我不确定你的MS SQL服务器是不是说SQL以及你是怎么做的)。
答案 1 :(得分:0)
您是否必须更新记录,或者您是否可以将整个访问表插入本地表,打上时间戳字段,并构建本地查询以获取最新条目?根据您上面的一些评论,听起来您在任何情况下都不会保留本地记录而非导入的记录。
SELECT PRODDESCRIPCODE, MAX(timestamp) FROM table GROUP BY PRODDESCRIPCODE
答案 2 :(得分:0)
我最终使用了此方法的变体: http://www.jertix.org/en/blog/programming/implementation-of-sql-pagination-with-ms-access.html
非常感谢您的建议。