MSSQL2005 分页存储过程

--调用方法:exec upPageDiv kucun,'id,ItemCode,ItemName','ItemCode asc','id>0',20,1,?,?
Create Procedure [dbo].[upPageDiv]
@TableName varchar(200), --表名
@Fields varchar(5000)='*', --字段名(默认为*)
@OrderField varchar(5000), --排序字段(必须!支持多字段)
@sqlWhere varchar(5000)=Null, --条件语句(不用加where)
@pageSize int, --指定每页记录条数
@pageIndex int=1, --指定当前页码
@totalPage int output, --返回总页数
@totalRecord int output --返回总记录数
As
Begin
Begin Tran --开始事务
Declare @sql nvarchar(4000);

--计算总记录数
If (@sqlWhere='' Or @sqlWhere=Null)
Set @sql='Select @totalRecord=Count(*) From '+@TableName
Else
Set @sql='Select @totalRecord=Count(*) From '+@TableName+' Where '+@sqlWhere

Exec sp_executesql @sql,N'@totalRecord int output',@totalRecord output

--计算总页数
Select @TotalPage=Ceiling((@totalRecord+0.0)/@PageSize)

If (@sqlWhere='' Or @sqlWhere=Null)
Set @sql='Select * From (Select ROW_NUMBER() Over(Order By '+@OrderField+') As rowID,'+@Fields+' From '+@TableName
Else
Set @sql='Select * From (Select ROW_NUMBER() Over(Order By '+@OrderField+') As rowID,'+@Fields+' From '+@TableName+' Where '+@sqlWhere

--处理页数超出范围情况
If @PageIndex<=0
Set @pageIndex=1

If @pageIndex>@TotalPage
Set @pageIndex=@TotalPage

--处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int

Set @StartRecord=(@pageIndex-1)*@PageSize+1
Set @EndRecord=@StartRecord+@pageSize-1

--继续合成sql语句
Set @sql=@sql+') As '+@TableName+' Where rowID Between '+Convert(varchar(50),@StartRecord)+' And '+Convert(varchar(50),@EndRecord)

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、付费专栏及课程。

余额充值