【问题标题】:How to limit select result rows in Progress 9.1D09?如何限制 Progress 9.1D09 中的选择结果行?
【发布时间】:2014-07-07 22:00:36
【问题描述】:

我正在尝试从 Progress 9.1D09 数据库中提取数据。我知道这不是 Progress 的最新版本,但升级不是一种选择。该数据库被一个垂死的程序使用,我正在将数据转移到它的继任者。

一个表有 162000 行。我想处理少量的行。

在 SQL Server 中,我会将查询更改为“从...中选择前 100 个 *”。在 MySQL 中,我会执行“select * from ... limit 0,100”。

这些语法都不起作用,到目前为止,我在谷歌上搜索正确的语法都失败了。

如何使用 SQL 限制源数据中的行数?

【问题讨论】:

  • 我最终只使用了 where 子句。

标签: sql progress-db


【解决方案1】:

规则 #1 -- 进度不是 SQL。 Progress 确实支持 SQL-92 接口,并且还嵌入了 SQL-89 语法——但 SQL 不是 Progress DB 的母语。

如果您使用的是嵌入式 SQL-89,则不支持 TOP。嵌入式 SQL 通过 4GL 引擎访问。如果您不使用 ODBC 或 JDBC,您可能正在尝试使用嵌入式 SQL-89。如果语法如下:

FOR EACH customer NO-LOCK:
  DISPLAY customer.
END.

如果您使用的是 4GL 和嵌入式 SQL-89,则可以正常工作。

4GL 解决方案可能如下所示:

Getting first 100 records from the table in Progress OpenEdge database (e.g. SELECT TOP 100..)

如果您通过 ODBC 驱动程序使用 SQL-92 -- TOP 支持已在 10.1B 中的某个时候添加

http://knowledgebase.progress.com/articles/Article/P13258

所以你对 v9 不走运。

【讨论】:

    【解决方案2】:

    你可以试试 rownumber 之类的

    SELECT FirstName, LastName, ROW_NUMBER() 
      OVER (ORDER BY PostalCode) AS 'RowNumber' 
      WHERE RowNumber BETWEEN(4,100)
    

    【讨论】:

    • 我刚刚给了你一个想法,SELECT FirstName, LastName, ROW_NUMBER() OVER (ORDER BY PostalCode) AS 'RowNumber' from tablename WHERE RowNumber BETWEEN(4,100) :-)
    猜你喜欢
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2019-01-01
    • 2014-03-28
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多