Firebird rownum * 或 * linq 样式跳过并采取

Posted

技术标签:

【中文标题】Firebird rownum * 或 * linq 样式跳过并采取【英文标题】:Firebird rownum *or* linq style skip and take 【发布时间】:2011-10-07 22:51:37 【问题描述】:

我使用的是 firebird 数据库,它似乎没有像 sql server 那样的 ROWNUM 或 ROW_NUMBER(),所以我无法按照here 解释的过程进行操作。

我有一个查询,其结果数据集大于我的系统内存可以容纳的容量。我正在尝试以较小的块加载数据集。我有一系列无法​​修改的通用查询,它们可以是任何东西。我知道我能做到

select first 5000 * from
(-my actual query here-)

获取前 5000 条记录。但是我怎样才能获得接下来的 5000 条记录。

谢谢

【问题讨论】:

【参考方案1】:

由于支持 FireBird 2.0 ROWS 语法,即您将使用

select * from tab ROWS m TO n

我建议你下载 FB 的 language reference update 记录在哪里。

【讨论】:

【参考方案2】:

在 firebird 中,您使用 Select First ? Skip ? 来指定数量以及您的偏移量。

【讨论】:

天哪!没想到会这么简单。这改变了一切!谢谢 在子查询中小心使用first。有一个 documented bug 在 2.1 中未修复。 在 Firebird 2.0 及更高版本中,兼容 SQL 的 ROWS 语法可用,应使用该语法代替 FIRST ... SKIP @ain 除非你想 Select * skip 5000 from table。您不能使用行语法复制该行为。反正不是很常见。 @EMBarbosa 你有点可以;从文档中引用:“您通常可以通过提供第二个参数来“伪造它”,该参数您知道该参数大于集合中的行数。

以上是关于Firebird rownum * 或 * linq 样式跳过并采取的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebird 中使用 VarChar 或 Char 而不是 Integer 时的性能、空间和其他观察

如何操作firebird数据库

使用 Firebird 的“SUBSTR”函数进行查询 [关闭]

firebird 1.5 中的事务

IBExpert中的Firebird在访问某些存储过程时会引发错误

Firebird 从 2.1.3 升级到 2.5?