sqlserver2005 存储过程分页

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE PROCEDURE [dbo].[RecvSMSLog_queryPage]

@UcNum nvarchar(20),           --电话号码
@PageSize int,                    --每页多少条记录
@pageIndex int = 1 ,              --指定当前为第几页
@TotalPage int  output           --返回总页数

 /*
 (
 @parameter1 int = 5,
 @parameter2 datatype OUTPUT
 ) 分页查询 接收信息
 */
AS
 
BEGIN
 Begin tran -- 开始事务
 declare @sql nvarchar(3000)
 declare @totalRecord int --总记录数
 
 --计算总记录数  
    set @sql = 'select @totalRecord = count(id) from (select * from dbo.RecvSMSLog) As tmpTable'
 
 EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录
 
  --计算总页数

  select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)   
 
    --处理页数超出范围情况
    if @PageIndex<=0
        Set @pageIndex = 1
   
    if @pageIndex>@TotalPage
        Set @pageIndex = @TotalPage

     --处理开始点
    Declare @StartRecord int
   
    set @StartRecord = (@pageIndex-1)*@PageSize
   
 if @pageIndex = 1
  begin
   Set @sql = 'select top ' + Convert(varchar(50),@PageSize) + ' * from dbo.RecvSMSLog '
   
   if len('' + @UcNum) > 0
   begin
    Set @sql = @sql + ' where UcNum = ''' + @UcNum + ''''
   end
   
   Set @sql = @sql + ' order by id desc'
  end
 else
 begin
   
   
    Set @sql = 'select top ' + Convert(varchar(50),@PageSize) + ' * from RecvSMSLog WHERE  (ID < (SELECT MIN(ID) AS Expr1 FROM  (SELECT TOP  ' + Convert(varchar(50),@StartRecord) + ' ID FROM RecvSMSLog AS RecvSMSLog_1 ORDER BY ID desc) AS derivedtbl_1))'
  
  if len('' + @UcNum) > 0
   begin
    Set @sql = @sql + ' and (UcNum = ''' + @UcNum + ''')'
   end
   
   Set @sql = @sql + ' order by id desc'
    end


 print @sql
    Exec(@sql)
  
    ---------------------------------------------------
    If @@Error <> 0
      Begin
        RollBack Tran
        Return -1
      End
     Else
      Begin
        Commit Tran
        ---返回记录总数
        Return @totalRecord
      End  

END

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值