Хранимая процедура, о которой говорилось выше, может выглядеть так:
CREATE PROCEDURE paging
@n int -- число записей на страницу
, @p int =1 -- номер страницы, по умолчанию - первая
AS
SELECT * FROM
(SELECT *,
CASE WHEN num % @n = 0 THEN num/@n ELSE num/@n + 1 END AS page_num,
CASE WHEN total % @n = 0 THEN total/@n ELSE total/@n + 1 END AS num_of_pages
FROM
(SELECT *,
ROW_NUMBER() OVER(ORDER BY price DESC) AS num,
COUNT(*) OVER() AS total FROM Laptop
) X
) Y
WHERE page_num = @p;
GO
Таким образом, если нам нужно получить вторую страницу при условии размещения 2-х записей на странице, достаточно написать
В результате получим:
code
|
model
|
speed
|
ram
|
hd
|
price
|
screen
|
num
|
total
|
page_num
|
num_of_pages
|
4 | 1298 | 600 | 64 | 10 | 1050,00 | 15 | 3 | 6 | 2 | 3 |
2 | 1321 | 500 | 64 | 8 | 970,00 | 12 | 4 | 6 | 2 | 3 |
|
А вот так будет выглядеть неполная вторая страница, если число записей на странице будет равно четырем:
code
|
model
|
speed
|
ram
|
hd
|
price
|
screen
|
num
|
total
|
page_num
|
num_of_pages
|
6 | 1298 | 450 | 64 | 10 | 950,00 | 12 | 5 | 6 | 2 | 2 |
1 | 1298 | 350 | 32 | 4 | 700,00 | 11 | 6 | 6 | 2 | 2 |
|