(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