--调用方法: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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。