实现分页的通用存储过程(第二种)

if object_id('spPage')is not null drop proc spPage
go
CREATE PROCEDURE spPage
(
@pageSize int,    ----每页显示的记录个数
@pageIndex int,   ----要显示哪一页的记录
@pageStart int,   ----第一页(1:表示指向第一页)
@pageEnd int      ----最后一页(1:表示指向最后一页)
)
AS

DECLARE @Counts INT
DECLARE @pageUp INT
DECLARE @pageDown INT

--获得总记录数
select @Counts=rows from sysindexes where id = object_id('AIp') and indid in (0,1)
--当前页的第一条记录RowID
SET @pageDown = @pageSize * (@pageIndex - 1) + 1

--当前页的最后一条记录RowID
SET @pageUp = @pageSize * @pageIndex
--获取分页后的数据
if @pageStart=1---指向第一页
 begin
  select top (@pageSize)* from AIp
 end
else
 if @pageEnd=1  ---指向最后一页
  begin
   if @Counts%@pageSize=0
    begin
     SELECT T.* FROM (SELECT id , RowID = ROW_NUMBER () OVER (ORDER BY id asc)
     FROM AIp  --Ip表名
     ) AS PageTableList JOIN AIp --Ip表名
     AS T ON T.id = PageTableList.id --没有主键此句删除
     WHERE RowID > @pageSize*(@Counts/@pageSize-1)-- BETWEEN @pageDown AND @pageUp
     ORDER BY T.id asc --没有主键此句删除
    end
   else
    begin
     SELECT T.* FROM (SELECT id , RowID = ROW_NUMBER () OVER (ORDER BY id asc)
     FROM AIp  --Ip表名
     ) AS PageTableList JOIN AIp --Ip表名
     AS T ON T.id = PageTableList.id --没有主键此句删除
     WHERE RowID >@pageSize*(@Counts/@pageSize)
    end

  end
else
if @pageStart=0 and @pageEnd=0
 begin
  SELECT T.* --没有主键此处不用 T.
  FROM
  (
  SELECT id ,--没有主键此处改用 *
     RowID = ROW_NUMBER () OVER (ORDER BY id asc)
  FROM AIp  --Ip表名
  ) AS PageTableList JOIN AIp --Ip表名
  AS T ON T.id = PageTableList.id --没有主键此句删除
  WHERE RowID BETWEEN @pageDown AND @pageUp
  ORDER BY T.id asc --没有主键此句删除
 end
-------------------------------------------------------------------------------
exec spPage @pageSize=5,@pageIndex=3,@pageStart=0,@pageEnd=0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值