SQL Server 2008分页方法?

23 浏览
0 Comments

SQL Server 2008分页方法?

我必须处理一个潜在的大记录列表,并且我一直在谷歌上搜索避免选择整个列表的方法,而是让用户选择一个页面(比如从1到10)并相应地显示记录。

比如,对于1000条记录,我将有100页,每页10条记录,最近的10条记录将首先显示,然后如果用户点击第5页,将显示第41到50条记录。

在每条记录中添加行号然后基于行号查询是否是一个好主意?有没有更好的方法来实现分页结果而不会有太多开销?

到目前为止,这些方法在这里的描述看起来最有希望:

http://developer.berlios.de/docman/display_doc.php?docid=739&group_id=2899

http://www.codeproject.com/KB/aspnet/PagingLarge.aspx

0
0 Comments

在SQL Server 2008中,出现了一种分页方法的问题。为了实现分页功能,可以使用一个带有两个row_number()列的CTE(公共表达式),一个按升序排序,一个按降序排序,通过将这两个row_number列相加,可以得到分页的行数以及总记录数。

以下是解决方法的代码示例:

create procedure get_pages(_number int, _length int)
as
    set nocount on;
    with cte as
    (
        select 
            Row_Number() over (order by sort_column desc) as row_num
            ,Row_Number() over (order by sort_column) as inverse_row_num
            ,id as cte_id
        From my_table
    )
    Select 
        row_num+inverse_row_num as total_rows
        ,*  
    from CTE inner join my_table
        on cte_id=df_messages.id
    where row_num between 
        (_number)*_length 
        and (_number+1)*_length
    order by rownumber

需要注意的是,如果排序列具有非唯一数据,那么在OVER子句中的排序可能不一致。此外,还可以使用", Count(*) OVER() as total_row_count",它将返回一列相同的数字。

通过以上方法,可以在SQL Server 2008中实现分页功能。

0
0 Comments

SQL Server 2008 Paging Methods

在SQL Server 2008中,分页是一个常见的需求。这篇文章将介绍一种高效的分页方法,并提供相应的代码示例。

下面的T-SQL存储过程是一种非常高效的分页实现方法。SQL优化器可以快速找到第一个ID。再加上使用ROWCOUNT,就可以实现CPU和读取的高效率。对于包含大量行的表,这种方法肯定比使用临时表或表变量的任何方法都要好。

需要注意的是,本示例中使用了一个顺序的自增列,但该代码适用于任何适合进行页面排序的列。而且,使用的列中的序列中断并不会影响结果,因为代码选择的是一定数量的行而不是列的值。

如果您在对一个可能包含非唯一值的列(例如LastName)进行排序,则需要在Order By子句中添加第二列,以使排序值再次变得唯一。

以下是示例代码:

CREATE PROCEDURE dbo.PagingTest
(
    @pageNumber int,
    @pageSize int
)
AS
DECLARE @startIndex int, @endIndex int
SET @startIndex = ((@pageNumber - 1) * @pageSize) + 1
SET ROWCOUNT @startIndex - 1
-- 在此处添加检查,以确保startIndex不大于表中的行数
SELECT @endIndex = [Id]
FROM dbo.TestTable
ORDER BY [Id]
SET ROWCOUNT @pageSize
SELECT *
FROM dbo.TestTable
WHERE [Id] >= @endIndex
ORDER BY [Id]
SET ROWCOUNT 0
GO

这段代码通过使用ROWCOUNT和ORDER BY子句实现了分页查询。首先,计算出起始索引(startIndex),然后将ROWCOUNT设置为startIndex - 1,这样SQL Server将返回startIndex之前的所有行。接下来,通过查询获取结束索引(endIndex),然后再次设置ROWCOUNT为pageSize,这样SQL Server将返回pageSize行,从endIndex开始。最后,将ROWCOUNT设置为0,以便返回所有行。

这种方法非常高效,因为它只需要两次查询,并且没有使用临时表或表变量。对于大型表,这种方法可以显著提高性能。

希望这篇文章对您了解SQL Server 2008中的分页方法有所帮助。如果您有任何疑问或意见,请随时留言。

0
0 Comments

在SQL Server 2008中,存在一些分页的方法。问题的原因是在SQL Server 2008中没有直接支持分页的功能,因此需要使用其他方法来实现分页。解决方法有两种:

第一种方法是使用OFFSET关键字。在SQL Server 2012中,引入了OFFSET FETCH子句来支持标准的分页操作。使用ROW_NUMBER() OVER()函数和OFFSET关键字可以实现分页。这种方法的优点是在某些情况下,SQL Server会更加高效地执行查询。

第二种方法是使用SEEK方法。这种方法通常被称为"seek方法",可以在SQL中实现更快的分页操作。使用TOP关键字和WHERE子句可以实现分页。通过记录前一页的最后一条记录的值,可以获取下一页的数据。这种方法的优点是查询速度更快,可以在常数时间内获取数据。

以上两种方法都有各自的优缺点,可以根据具体需求选择合适的方法来实现分页操作。在Web应用程序中,使用SEEK方法来实现懒加载更多数据是最佳实践。需要注意的是,在使用SEEK方法时,需要额外进行一次计数查询来获取总记录数,这会增加查询的成本。

SQL Server 2008中可以通过OFFSET关键字和SEEK方法来实现分页操作。根据具体需求和性能要求,选择合适的方法来实现分页。

0