繁体   English   中英

使用SQL Server 2005的最佳分页解决方案?

[英]Best paging solution using SQL Server 2005?

对于大约5,000-10,000行的表,使用SQL Server 2005的最有效的分页解决方案是什么? 我见过几个,但没有比较它们。

对于大小的表,使用公用表表达式(CTE)和ROW_NUMBER; 使用一个小函数来计算基于@PageNumber@PageSize变量(或任何你想要调用的变量)带回来的记录。 我们的一个存储过程的简单示例:

-- calculate the record numbers that we need

DECLARE @FirstRow INT, @LastRow INT
SELECT  @FirstRow   = ((@PageNumber - 1) * @PageSize) + 1,
        @LastRow    = ((@PageNumber - 1) * @PageSize) + @PageSize

;
WITH CTE AS
(
    SELECT [Fields]
           , ROW_NUMBER() OVER (ORDER BY [Field] [ASC|DESC]) as RowNumber 
    FROM [Tables]
    WHERE [Conditions, etc]
)
SELECT * 
       -- get the total records so the web layer can work out
       -- how many pages there are
       , (SELECT COUNT(*) FROM CTE) AS TotalRecords
FROM CTE
WHERE RowNumber BETWEEN @FirstRow AND @LastRow
ORDER BY RowNumber ASC

我读过的各种分页技术的最佳讨论之一就是: SQL Server 2005 Paging - The Holy Grail 您必须在SQLServerCentral.com上完成免费注册才能查看该文章,但这非常值得。

即使这应该有帮助..

SELECT * FROM 
( 
    SELECT Row_Number() OVER(order by USER_ID) As RowID,
    COUNT (USER_ID) OVER (PARTITION BY null) AS TOTAL_ROWS, 
    select name from usertbl
) 
As RowResults WHERE 
RowID Between 0 AND 25

不确定它是否比@keith版更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM