SQL Server query with pagination and count

前端 未结 5 1004
一生所求
一生所求 2020-12-12 13:54

I want to make a database query with pagination. So, I used a common-table expression and a ranked function to achieve this. Look at the example below.

decla         


        
5条回答
  •  一整个雨季
    2020-12-12 14:21

    There are many way we can achieve pagination: I hope this information is useful to you and others.

    Example 1: using offset-fetch next clause. introduce in 2005

    declare @table table (name varchar(30));
    insert into @table values ('Jeanna Hackman');
    insert into @table values ('Han Fackler');
    insert into @table values ('Tiera Wetherbee');
    insert into @table values ('Hilario Mccray');
    insert into @table values ('Mariela Edinger');
    insert into @table values ('Darla Tremble');
    insert into @table values ('Mammie Cicero');
    insert into @table values ('Raisa Harbour');
    insert into @table values ('Nicholas Blass');
    insert into @table values ('Heather Hayashi');
    
    declare @pagenumber int = 1
    declare @pagesize int = 3
    
    --this is a CTE( common table expression and this is introduce in 2005)
    with query as
    (
      select ROW_NUMBER() OVER(ORDER BY name ASC) as line, name from @table
    ) 
    
    --order by clause is required to use offset-fetch
    select * from query
    order by name 
    offset ((@pagenumber - 1) * @pagesize) rows
    fetch next @pagesize rows only
    

    Example 2: using row_number() function and between

    declare @table table (name varchar(30));
    insert into @table values ('Jeanna Hackman');
    insert into @table values ('Han Fackler');
    insert into @table values ('Tiera Wetherbee');
    insert into @table values ('Hilario Mccray');
    insert into @table values ('Mariela Edinger');
    insert into @table values ('Darla Tremble');
    insert into @table values ('Mammie Cicero');
    insert into @table values ('Raisa Harbour');
    insert into @table values ('Nicholas Blass');
    insert into @table values ('Heather Hayashi');
    
    declare @pagenumber int = 2
    declare @pagesize int = 3
    
    SELECT *
    FROM 
    (select ROW_NUMBER() OVER (ORDER BY PRODUCTNAME) AS RowNum, * from Products)
    as Prodcut
    where RowNum between (((@pagenumber - 1) * @pageSize )+ 1) 
    and (@pagenumber * @pageSize )
    

    I hope these will be helpful to all

提交回复
热议问题