2011-09-09 9 views
4

ストアドプロシージャを使用して、yページ分のx行のデータ行を取得します。 例ストアドプロシージャによるデータベースページング

のために、私は20のDataRow 私のページサイズは、私が2ページ を選択した場合、私は17,18

データ行を取得する2 である私は、トップ200を使用すると、第1および選択することにより、順序を使用することができますがあります最後のデータローですが、どのようにしてページを取得しますか?

@PageNumber INT 
As 
BEGIN 
SELECT COUNT(rate.RateID)/200 FROM dbo.Rate where dbo.Rate.Hourly =0 

DECLARE @LastIndex INT 
SET @LastIndex= (SELECT TOP 1 rate.RateID FROM dbo.Rate where dbo.Rate.Hourly =0 ORDER BY rate.RateID ASC) 

Select TOP 200 
    [RateID], 
    [PairID], 
    [Open], 
    [Close], 
    [High], 
    [Low], 
    [Difference], 
    [Average], 
    [Percentage], 
    [InfoDate], 
    [Hourly], 
    [CaptureDateTime] 
From Rate 
WHERE Hourly =0 AND RateID >=(@LastIndex+(200* @PageNumber)) 
ORDER BY [RateID] ASC 

エンド これは私が今持っているものであるが、そのが正しく

+0

は、「正常に動作していない」 – Justin

+0

すぎデータベースを定義し、してください – billinkc

+0

何データベースエンジン(およびバージョン)を定義し、あなたは使用していますか? – Lamak

答えて

6

[OK]を働いていない、あなたが使用しているRDBMSものを指定していないので、私はあなたのSQLのために、少なくとも有効なソリューションを与えることができますServer 2005+

DECLARE @PageNumber INT, @PageSize INT 
SET @PageNumber = 3 
SET @PageSize = 5; 

WITH CTE AS 
(
    SELECT *, ROW_NUMBER() OVER(ORDER BY RateID) Corr 
    FROM Rate 
    WHERE Hourly = 0 
) 
SELECT * 
FROM CTE 
WHERE Corr BETWEEN @PageNumber*@PageSize AND @PageNumber*@[email protected] 

また、あなたは、SQL Serverの次のバージョン(「デナリ」)で、これはTOP句に行われたいくつかの修正を非常に簡単になることを知っている必要があります。

+0

最後の行ページの計算が正しいとは思わない。 Corr BETWEEN(@PageSize *(@PageNumber - 1))+ 1 AND(@ PageNumber * @ PageSize)は、 – ozz

0
Select * from(
SELECT 
    (ROW_NUMBER()OVER (ORDER BY InfoDate ASC)) AS RowNo, 
    [RateID], 
    [PairID], 
    [Open], 
    [Close], 
    [High], 
    [Low], 
    [Difference], 
    [Average], 
    [Percentage], 
    [InfoDate], 
    [Hourly], 
    [CaptureDateTime] 
From Rate 
) AS T 
WHERE t.RowNo 
BETWEEN 200*@PageNumber AND 200 * (@PageNumber+1)-1 
ORDER BY RowNo DESC 

この私が使用したものは...

関連する問題