SQL Server 2008 paging methods?

前端 未结 7 578
傲寒
傲寒 2020-11-29 06:23

I have to work with a potentially large list of records and I\'ve been Googling for ways to avoid selecting the whole list, instead I want to let users select a page (like f

7条回答
  •  南方客
    南方客 (楼主)
    2020-11-29 06:53

    If you use a CTE with two row_number() columns - one sorted asc, one desc, you get row numbers for paging as well as the total records by adding the two row_number columns.

    create procedure get_pages(@page_number int, @page_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 
            (@page_number)*@page_length 
            and (@page_number+1)*@page_length
        order by rownumber
    

提交回复
热议问题