Sybase IQ分页

时间:2009-06-22 17:39:45

标签: tsql sybase-iq

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

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

stp_mystoredproc(startIndex INTEGER, endIndex INTEGER)

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

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

最终目标是翻阅整个结果集(1000条记录),但一次只能翻阅100行。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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