set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTERProcedure[dbo].[Proc_splitPage] @TableNamevarchar(50), --表名 @Fieldsvarchar(5000) ='*', --字段名(全部字段为*) @OrderFieldvarchar(5000), --排序字段(必须!支持多字段) @sqlWherevarchar(5000) =Null,--条件语句(不用加where) @pageSizeint, --每页多少条记录 @pageIndexint=1 , --指定当前为第几页 @TotalPageint output --返回总页数 as begin BeginTran--开始事务 Declare@sqlnvarchar(4000); Declare@totalRecordint; --计算总记录数 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@StartRecordint Declare@EndRecordint 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 RollBackTran Return-1 End Else Begin CommitTran Return@totalRecord---返回记录总数 End end ------------------------------------------------------------------------------------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTERPROCEDURE[dbo].[GetRecordByPage] @tblNamevarchar(255), -- 表名 @fldNamevarchar(255), -- 主键字段名 @selectContentVARCHAR(255), --查询的列名,为空则查询所有列 @PageSizeint, -- 页尺寸 @PageIndexint, -- 页码 @IsReCountbit, -- 返回记录总数, 非 0 值则返回 @OrderTypebit, -- 设置排序类型, 非 0 值则降序 @strWherevarchar(1000) -- 查询条件 (注意: 不要加 where) AS declare@strSQLvarchar(6000) -- 主语句 declare@strTmpvarchar(100) -- 临时变量 declare@strOrdervarchar(400) -- 排序类型 if@OrderType!=0 begin set@strTmp='<(select min' set@strOrder=' order by ['+@fldName+'] desc' end else begin set@strTmp='>(select max' set@strOrder=' order by ['+@fldName+'] asc' end set@strSQL='select top '+str(@PageSize) +''+@selectContent+' from [' +@tblName+'] where ['+@fldName+']'+@strTmp+'([' +@fldName+']) from (select top '+str((@PageIndex-1)*@PageSize) +' [' +@fldName+'] from ['+@tblName+']'+@strOrder+') as tblTmp)' +@strOrder if@strWhere!='' set@strSQL='select top '+str(@PageSize) +' * from [' +@tblName+'] where ['+@fldName+']'+@strTmp+'([' +@fldName+']) from (select top '+str((@PageIndex-1)*@PageSize) +' [' +@fldName+'] from ['+@tblName+'] where '+@strWhere+'' +@strOrder+') as tblTmp) and '+@strWhere+''+@strOrder if@PageIndex=1 begin set@strTmp='' if@strWhere!='' set@strTmp=' where '+@strWhere set@strSQL='select top '+str(@PageSize) +' * from [' +@tblName+']'+@strTmp+''+@strOrder end if@IsReCount!=0 set@strSQL='select count(*) as Total from ['+@tblName+']'+' where '+@strWhere exec (@strSQL)