通用分頁存儲過程

--saik友情提供 saikoyz@hotmail.com

/*
功能描述:對指定表中滿足條件的記錄按指定列進行分頁查詢
作    者:saiko
版    本:1.10
最后修改:2005-04-13           
調用例子:
 spoSplitPages'任何條件的SQL語句',2,10     -- 第2頁,每頁10行
EXEC spoSplitPages  '你的SQL語句','排序欄位',0 ,30, 1  -- 0: 最後一頁  30:每頁記錄數  1:降冪
*/
CREATE  procedure spoSplitPages
@SqlQuery nvarchar(4000),  --查詢字符串
@OrderFieldName  varchar(30),   --按該列為關鍵字來進行排序分頁
@CurrentPage int,  --第N頁 (如果是 0  則讀取 最后 一頁的記錄  )
@PageSize int,   --每頁行數
@OrderType    int          --排序, 0:順序,  1:  其它數字: 不進行排序 (只有此處的數字不為 0 為 1 的時候,外程序傳入的  OrderFieldName  才可以為空!)

as

DECLARE @sql nvarchar(4000), @tPageCount int

 IF @OrderType=0
   SET @sql= @SqlQuery + '  ORDER BY  '+@OrderFieldName

 IF @OrderType=1
   SET @sql =@SqlQuery + '  ORDER BY  '+@OrderFieldName + '  DESC '
    else
 SET @sql =@SqlQuery
BEGIN
      set nocount on
  declare @P1 int,--P1是游標的id
  @rowcount int
  --print  @sql
  exec sp_cursoropen @P1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
  SET  @tPageCount = ceiling(1.0*@rowcount/@PageSize)
  if @CurrentPage = 0
   set  @CurrentPage = @tPageCount  -- @PageIndex = 0 表示在調用時,是首次查詢,先讀取 最后 一頁的記錄 
  set @CurrentPage=(@CurrentPage-1)*@PageSize+1
  exec sp_cursorfetch @P1,16,@CurrentPage,@PageSize
  exec sp_cursorclose @P1

  select  @tPageCount as PagesCount ,@rowcount as RowsCount,@CurrentPage as CurrentPage 
     set nocount off
END
GO

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值