Sybase IQ分页
我想知道是否有人解决了以下要求。我有一个存储过程,返回例如1000行的结果集。现在我需要一次限制100行。所以,我会在开始和结束的索引值传递,我只想开始索引行数和结束索引行数的记录Sybase IQ分页
因此,例如,我的存储过程调用签名如下所示: -
stp_mystoredproc(startIndex INTEGER, endIndex INTEGER)
所以,如果我设置startIndex = 100
和endIndex = 200
然后我想在存储过程中的行100返回记录到了200组1000
我第一次尝试的总复位的结果放在一个临时表中设置与身份列然后选择基于我需要的范围的身份,但这有点慢。我知道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(100,346)
谢谢,这实际上是一个不错的主意,应该工作得很好。我会试一试。 – 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
谢谢你,我在Sybase IQ v12.7上试过它,但似乎没有被支持。我会在几周内在v15下再次尝试一下,看看它是否在那里有效。 – 2011-11-14 09:52:34
有点搜索,我发现Sybase IQ有两个特点与分页帮助后。 NUMBER(*)函数为您提供结果集中记录的运行计数,并且ROWID从表中提供行ID。 – 2009-06-23 19:57:50