在Access中使用SQL限制记录

时间:2016-07-26 15:06:15

标签: sql ms-access

我们从外部源获取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,然后返回零。

任何人都可以帮我吗?我没有其他专栏要过滤。有没有办法在循环中选择一定数量的记录然后递增该数字,直到我获得所有记录,然后停止?

3 个答案:

答案 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

非常感谢您的建议。

相关问题