ここの記事とSOの専門家からの最近の回答の助けを借りて、一連のレコードを効率的にページングするのに役立つ次の情報にたどり着きました。
私の最後のいくつかの質問は
Total Number of Records
'Total' という SQL CTE の末尾にあるペイロードにを含める方法を参照してください。それはあなたがこれを行う方法ですか?- 他の提案はありますか?より簡潔にする、または改善する可能性のある領域はありますか?
Return Total Number of Pages
DECLARE @page_size INT = 5;
DECLARE @page_nbr INT = 4;
DECLARE @search NVARCHAR(MAX) = '';
DECLARE @sort_order INT = 2;
WITH AllProducts
AS
(
SELECT *,
CASE @sort_order
WHEN 1 THEN ROW_NUMBER() OVER ( ORDER BY ProductID )
WHEN 2 THEN ROW_NUMBER() OVER ( ORDER BY ProductName )
END AS 'Seq'
FROM Products
),
Filtered
AS
(
SELECT * FROM AllProducts
WHERE ProductName like '%'+@search+'%'
OR
@search is null
)
SELECT (select COUNT(*) from Filtered) as 'Total', * FROM Filtered
WHERE seq > (@page_nbr - 1) * @page_size
AND seq <= @page_nbr * @page_size