许多应用程序具有网格,一次显示一页数据库表中的数据。他们中的许多人还允许用户选择每页的记录数,按任何列排序以及在结果之间来回导航。
在不将整个表提交给客户端然后过滤客户端上的数据的情况下,实现此模式的好算法是什么?您如何仅将要显示的记录带给用户?
LINQ是否简化了解决方案?
最佳答案
在MS SQL Server 2005及更高版本上,ROW_NUMBER()似乎可以工作:
T-SQL: Paging with ROW_NUMBER()
DECLARE @PageNum AS INT;
DECLARE @PageSize AS INT;
SET @PageNum = 2;
SET @PageSize = 10;
WITH OrdersRN AS
(
SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum
,OrderID
,OrderDate
,CustomerID
,EmployeeID
FROM dbo.Orders
)
SELECT *
FROM OrdersRN
WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1
AND @PageNum * @PageSize
ORDER BY OrderDate
,OrderID;