/**//* ****************************************************************************************** 过程名称:Common_ColumnType_Pagination 过程功能: 代码设计:小朱(zsy619@163.com) 设计时间:2005-11-3 13:58:26 ****************************************************************************************** 功能描述: ****************************************************************************************** 如果您修改了我的程序,请留下修改记录,以便对程序进行维护,谢谢 !!! ========================================================================================== 修改人 修改时间 修改原因 ------------------------------------------------------------------------------------------ ========================================================================================== ****************************************************************************************** 备注:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序 查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数 ***************************************************************************************** */ CreateProcedure[dbo].[Common_ColumnType_Pagination] @tbvarchar(50), --表名 @colvarchar(50), --按该列来进行分页 @coltypeint, --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型 @orderbybit, --排序,0-顺序,1-倒序 @collistvarchar(800),--要查询出的字段列表,*表示全部字段 @pagesizeint, --每页记录数 @pageint, --指定页 @conditionvarchar(800),--查询条件 @pagesint OUTPUT --总页数 AS Declare@intResultInt BeginTran -----------------------------------------------------------------代码设计-------------------------------------------------------------------- DECLARE@sqlnvarchar(4000),@where1varchar(800),@where2varchar(800) IF@conditionisnullorrtrim(@condition)='' BEGIN--没有查询条件 SET@where1=' WHERE ' SET@where2='' END ELSE BEGIN--有查询条件 SET@where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件 SET@where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件 END SET@sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesizeASvarchar)+') FROM '+@tb+@where2 EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数 IF@orderby=0 SET@sql='SELECT TOP '+CAST(@pagesizeASvarchar)+''+@collist+' FROM '+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) ASvarchar)+''+ @col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col ELSE SET@sql='SELECT TOP '+CAST(@pagesizeASvarchar)+''+@collist+' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) ASvarchar)+''+ @col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+@col+' DESC' IF@page=1--第一页 SET@sql='SELECT TOP '+CAST(@pagesizeASvarchar)+''+@collist+' FROM '+@tb+ @where2+'ORDER BY '+@col+CASE@orderbyWHEN0THEN''ELSE' DESC'END EXEC(@sql) Set@intResult=@@ROWCOUNT ---------------------------------------------------------------------------------------------------------------------------------------------------- If@@Error<>0 Begin RollBackTran Return-1 End Else Begin CommitTran Return@intResult End GO