Tsql Sybase IQ分页

Tsql Sybase IQ分页,tsql,sap-iq,Tsql,Sap Iq,我想知道是否有人能解决以下要求。我有一个存储过程,它返回一个结果集,例如1000行。现在我需要一次限制为100行。因此,我将传入一个开始和结束索引值,我只需要开始索引行数和结束索引行数之间的记录 例如,我的存储过程调用签名如下所示:- stp_mystoredproc(startIndex INTEGER, endIndex INTEGER) 因此,如果我设置了startIndex=100和endIndex=200,那么我希望存储过程返回总重置集1000中第100到200行的记录 我的第一次尝

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

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

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

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


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

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

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

select top (endIndex-startIndex) start at startIndex from <query>
从中选择top(endIndex startIndex)从startIndex开始
我不确定是否可以在
top
子句中使用表达式,因此可能需要创建一个字符串并使用
executeimmediate


请参见

谢谢,这实际上是一个好主意,应该可以正常工作。我会试试看。经过一点搜索,我发现Sybase IQ有两个有助于分页的功能。函数号(*)提供了结果集中记录的运行计数,ROWID提供了表中的行Id。为此,我在Sybase IQ v12.7上进行了尝试,但似乎不受支持。我将在几周后在v15下再次尝试,看看它在那里是否有效。