Пейджинг базы данных хранимой процедурой - PullRequest
4 голосов
/ 09 сентября 2011

Я хочу, чтобы хранимая процедура принимала x количество строк данных за y номер страницы. Например

у меня 20 датаров размер моей страницы 2 если я выберу страницу 2 я получу строку данных 17,18

Я могу использовать топ 200 и использовать order by для выбора первого и последнего датаров, но как мне получить страницы между ними.

@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

Конец это то, что у меня сейчас, но оно не работает должным образом

Ответы [ 2 ]

6 голосов
/ 09 сентября 2011

Хорошо, поскольку вы не указали, какую СУБД вы используете, я могу дать вам решение, которое действительно как минимум для 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*@PageSize+@PageSize-1

Кроме того, вы должны знать, что в следующей версии SQL Server («Denali») это будет намного проще с некоторыми изменениями, внесенными в предложение TOP.

0 голосов
/ 12 сентября 2011
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

Это то, что я использовал ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...