2009-06-22 106 views
1

我想知道是否有人解決了以下要求。我有一個存儲過程,返回例如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

回答

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)

+0

謝謝,這實際上是一個不錯的主意,應該工作得很好。我會試一試。 – 2009-06-22 20:30:23

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

+0

謝謝你,我在Sybase IQ v12.7上試過它,但似乎沒有被支持。我會在幾周內在v15下再次嘗試一下,看看它是否在那裏有效。 – 2011-11-14 09:52:34