Advantage 数据库中的分页

Posted

技术标签:

【中文标题】Advantage 数据库中的分页【英文标题】:Paging in Advantage Database 【发布时间】:2010-02-18 10:46:07 【问题描述】:

我正在创建一个在 Advantage Database 服务器上运行的 Web 应用程序,这不是我个人选择的武器,但这是公司使用的。 我有几个最终用户需要能够查看的大列表,但是我似乎找不到在 SQL 中对结果进行分页的方法。

Advantage 数据库有类似 LIMIT / OFFSET 的东西吗?如果没有,有什么建议可以解决这个问题吗?

提前谢谢你!

【问题讨论】:

【参考方案1】:

我了解 LIMIT 和 ROWNUM 将是 Advantage 即将发布的版本中的新功能。 http://feedback.advantagedatabase.com/forums/2671-general/suggestions/30213-return-query-specific-row-number-?ref=title

但是,在那之前,我过去一直使用它来选择第 50-60 行。

从 mytable 中选择前 10 个 * 其中 rowid 不在(从 mytable 中选择前 50 个 rowid)

@tommieb75,您指出 SQL 方言不标准。我发现它基于包含大部分 SQL-92 标准和一些 SQL-2003 特性的标准。​​

【讨论】:

这似乎可行,尽管我必须说获取整个表(大约有 160K 记录)所需的时间比从中获取特定页面所需的时间更少。另外,这如何在连接表上工作?【参考方案2】:

更新这里的任何绊脚石,但正如 Edgar 在他的回答中提到的,Advantage 10 SQL 现在支持 START AT 关键字。

SELECT TOP 10 START AT 11 * FROM emp

见:devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_limiting_query_results.htm

【讨论】:

【参考方案3】:

根据this,Advantage 中LIMIT 的正确语法是SELECT TOP 10 * FROM YOURTABLE

【讨论】:

@dries.hoebeke :是的,显然没有ROWNUM 功能,因此能够使用SELECT TOP 让您在分页方面无处可去。我想您唯一剩下的选择是将所有内容加载到内存中并执行分页逻辑。这绝对是最大吸力的解决方案,但我真的没有看到你有其他选择。如果您还没有,您可能应该在这里投票支持ROWNUM 的未来实施:feedback.advantagedatabase.com/forums/2671-general/suggestions/…

以上是关于Advantage 数据库中的分页的主要内容,如果未能解决你的问题,请参考以下文章

如何将 100 年添加到 Advantage 数据库中的日期

Windows 服务中的 Advantage 数据提供程序错误 6097

Advantage 和 PHP - 错误 6303:超过最大 Advantage 数据库服务器连接数

Advantage 数据库服务器 ORDER BY 行为

Advantage SQl 中的 Datediff 函数

客户端通信层从 Advantage 数据库服务器接收到的数据比预期的要多