【问题标题】:Sybase IQ PaginationSybase IQ 分页
【发布时间】:2009-06-22 17:39:44
【问题描述】:

我想知道是否有人可以解决以下要求。我有一个存储过程,它返回例如 1000 行的结果集。现在我需要一次将其限制为 100 行。所以我将传入一个开始和结束索引值,我只想要开始索引行数和结束索引行数之间的记录

例如,我的存储过程调用签名如下所示:-

stp_mystoredproc(startIndex INTEGER, endIndex INTEGER)

因此,如果我设置了 startIndex = 100endIndex = 200,那么我希望存储过程返回总重置集 1000 中第 100 到 200 行中的记录。

我的第一次尝试是将结果集放在带有标识列的临时表中,然后根据标识选择我需要的范围,但这有点慢。我知道 Oracle 支持分页,因此您可以对结果集进行分页。谁知道 Sybase IQ(v12.6 或 v12.7)是否支持类似的东西?

最终目标是对整个结果集(1000 条记录)进行分页,但一次分页为 100 行。

【问题讨论】:

  • 经过一番搜索,我发现 Sybase IQ 有两个有助于分页的功能。函数 NUMBER(*) 为您提供结果集中记录的运行计数,ROWID 提供表中的行 ID。

标签: tsql sap-iq


【解决方案1】:

我不知道sybase。但也许你可以做这样的事情

myproc(@count int, @lastid int)

select top @count *
from MyTabel 
where id > @lastid 
order by id

第一次通话

exec myproc(100, 0)

给你类似的东西

3 appels
4 banana
..
..
..
346 potatto

下次通话

exec myproc myproc(100,346)

【讨论】:

  • 谢谢,这实际上是个好主意,应该可以正常工作。我试试看。
【解决方案2】:

Sybase IQ 和 Sybase SQL Anywhere 共享相同的查询执行引擎和(大部分)SQL 语法,因此您通常可以使用 SQL Anywhere 语法。试试这个:

select top (endIndex-startIndex) start at startIndex from <query>

我不确定您是否可以在top 子句中使用表达式,因此您可能必须创建一个字符串并使用execute immediate

http://dcx.sybase.com/index.html#1201/en/dbreference/select-statement.html

【讨论】:

  • 谢谢,我在 Sybase IQ v12.7 上试过,但似乎不受支持。我会在几周后在 v15 下再次尝试,看看它是否在那里工作。
猜你喜欢
  • 2018-09-08
  • 2018-07-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多