(sql server)数据分页的实现

时间:2023-03-09 21:55:05
(sql server)数据分页的实现

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

方法一:利用ROW_NUMBER()方法

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

/*如要查詢的表為Test ,排序字段為TestA*/
declare @Count int /*每頁顯示數據的條數*/
declare @Page int /*頁數*/
set @Count=
set @Page=
select top * 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