Sybase IQ分页

问题描述:

我想知道是否有人解决了以下要求。我有一个存储过程,返回例如1000行的结果集。现在我需要一次限制100行。所以,我会在开始和结束的索引值传递,我只想开始索引行数和结束索引行数的记录Sybase IQ分页

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

stp_mystoredproc(startIndex INTEGER, endIndex INTEGER) 

所以,如果我设置startIndex = 100endIndex = 200然后我想在存储过程中的行100返回记录到了200组1000

我第一次尝试的总复位的结果放在一个临时表中设置与身份列然后选择基于我需要的范围的身份,但这有点慢。我知道Oracle支持分页,因此您可以翻阅结果集。任何人都知道Sybase IQ(v12.6或v12.7)是否支持类似的东西?

的最终目标是通过页面的整个结果集(1000条记录),但是在一个时间100名的网页。

+0

有点搜索,我发现Sybase IQ有两个特点与分页帮助后。 NUMBER(*)函数为您提供结果集中记录的运行计数,并且ROWID从表中提供行ID。 – 2009-06-23 19:57:50

我不知道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)

+0

谢谢,这实际上是一个不错的主意,应该工作得很好。我会试一试。 – 2009-06-22 20:30:23

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

+0

谢谢你,我在Sybase IQ v12.7上试过它,但似乎没有被支持。我会在几周内在v15下再次尝试一下,看看它是否在那里有效。 – 2011-11-14 09:52:34