(sql server)数据分页的实现

谈谈自己了解的几种数据库分页的方法,下面來分享下,有什么好的方法可以指导一下哦..

 

方法一:利用ROW_NUMBER()方法

利用ROW_NUMBER 产生序列后直接取出

 

/*如要查詢的表為Test ,排序字段為TestA*/
                  declare @Count int /*每頁顯示數據的條數*/
                  declare @Page int /*頁數*/
                  set @Count=10
                  set @Page=3
                   select top 10 * from 
                      (select *,ROW_NUMBER() over(order by t1.TestA )
                               as RowNumber from (select * from Test)t1) A
                  where A.RowNumber>(@Count*@Page)

這個还有一个问题,查詢結果会多產生一個 RowNumber欄位,需要另外的去除或無視..

方法二:排序的方法

例如我們每頁查詢出10條數據,要查詢第4頁,我們是先正序查出前40條數據,在倒序查詢前10條,在倒序改變為正確的順序

Create procedure [dbo].[page]
 @pageSize int,
 @pageNumber int
as
begin
declare @totalNumber int

set @totalNumber=@pageSize*@pageNumber
select top (@totalNumber) * into #pagetable from Test  order by TestA asc
select top (@pageSize)* from #pagetable order by TestA desc
/*需要再倒序一次*/...
end

第二種方法比第一種麻煩,但是有這個想法就ok了

2014-5-5补充

第一种方法还是有点麻烦,我随手写了一个,比较简单

alter procedure p_query
@pageSize int,
@curPage int
as
begin

select * from(
select ROW_NUMBER() over(order by ID asc) pid,*  from dbo.TestPage
)T where pid between (@curPage-1)*@pageSize+1 and (@curPage-1)*@pageSize+@pageSize
end

 

 

posted @ 2013-10-11 17:38  清风君  阅读(383)  评论(0编辑  收藏  举报