今天学习和熟练的写了几种简单的分页存储过程,感觉还是蛮简单的,运用的2中不同的分页方法,一种是很流行的row_number做的分页存储,另一种是用子查询做的分页存储,2种分页存储方法都通过了测试,整理如下:
--第一种是以Row_Number函数做的分页存储过程
create proc NewsProc
@pageIndex int,--页码
@pageSize int,--页容量
@pageCount int output,--输出参数,页总数
@rowCount int output --输出参,总行数
as
begin
select @rowCount=count(NewsID) from News --总行数
set @pageCount=ceiling(cast(@rowCount as float)/cast(@pageSize as float)) --获得总页数
select * from
(
select Row_Number() over(order by NewsID) as num, * from News
)as temp
where num>((@pageIndex-1)*@pageSize) and num<=(@pageIndex*@pageSize)
end
declare @rc int,@pc int
exec NewsProc 5,5,@rc output,@pc output
select @rc,@pc
--第二种是运用子查询做的分页存储过程
create procedure procNews
@pageSize int,
@pageIndex int,
@pageCount int output,
@rowCount int output
as
begin
select top (@pageSize) *from News Where NewsID not in(select top (@pageSize*(@pageIndex-1)) NewsID from News order by NewsID)
select @rowCount=count(NewsID) from News --总行数
set @pageCount=ceiling(cast(@rowCount as float)/cast(@pageSize as float)) --获得总页数 --cast是做类型转换,还可以用convert(float,@rowCount)
end
declare @pc int,@rc int
exec procNews 5,3,@pc output,@rc output
select @pc,@rc
显示效果如下: