1

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

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

stp_mystoredproc(startIndex INTEGER, endIndex INTEGER)

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

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

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

4

2 回答 2

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)

于 2009-06-22T19:51:09.860 回答
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

于 2011-11-13T13:47:59.850 回答