CREATE  PROCEDURE [dbo].[PublicSplitPage_sp]
@TableName varchar(8000),   --表名
@SqlStr    varchar(8000)=null,    --查询语句
@Condition varchar(8000),    --查询条件
@PageIndex int,                --页所引,从0开始
@PageSize int,                --分页大小
@orderDESC varchar(100),    --倒排序字段,支持多个字段
@orderASC varchar(100),        --顺排序字段,支持多个,字段先后顺序与倒排序一致(有重复性字段时,最后加ID排序)
@PKField  varchar(50)='*',    --索引字段
@SearField varchar(1000),    --查询字段
@RecordCount int out        --返回记录数
AS
if @SqlStr is not null and @SqlStr<>''
beginexec(@SqlStr)select @RecordCount=@@ROWCOUNT
end
else
begindeclare @iTop int,@tmpTop intdeclare @vSQL nvarchar(2000)set @vSQL = N'select @count=Count('+@PKField+') from ' + @TableName + ' where ' + @Conditionexec sp_ExecuteSQL @vSQL, N'@count int output', @RecordCount output    set @iTop=@PageSizeset @tmpTop=@RecordCount-(@PageSize*(@PageIndex-1))if @RecordCount<@PageSize*@PageIndexbeginset @iTop=@tmpTopendDECLARE @sqlStr1 varchar(8000)IF @PageIndex = 1SET @sqlStr1 = 'SELECT TOP ' + STR(@PageSize) + '  '+@SearField+'  FROM '+@TableName+' WHERE '+@Condition+' ORDER BY  '+@orderDESCELSE if @PageIndex<@RecordCount/(2*@PageSize)    SET @sqlStr1 = 'SELECT TOP ' + STR(@PageSize) + '  * FROM (select top  ' + STR(@PageSize) + '  * from (SELECT TOP ' + STR(@PageSize*@PageIndex) + '  '+@SearField+'  FROM '+@TableName+' WHERE '+@Condition+'  ORDER BY '+@orderASC+') TempTable order by '+@orderDESC+') A  ORDER BY  '+@orderASCelseSET @sqlStr1 = 'SELECT TOP ' + STR(@iTop) + '  * FROM (SELECT TOP ' + STR(@tmpTop) + '  '+@SearField+'  FROM '+@TableName+' WHERE '+@Condition+'  ORDER BY '+@orderASC+') TempTable  ORDER BY  '+@orderDESCprint(@sqlStr1)EXEC(@sqlStr1)
end

附:其他实现思路:

1、

CREATE PROCEDURE [dbo].[sp_PageRecordByRowNumber]
@sqlStr NVARCHAR(MAX)='',            --表数据源
@Orders NVARCHAR(200)='',            --排序,直接写排序语句,不要加order by,如intID desc
@intPage INT=1,                        --当前页
@PageSize INT=20,                    --页大小
@TotalRecord INT=0,                    --如果等于0则每次都计算总记录数,大于0则不计算,直接返回
@RetVal VARCHAR(100) = NULL OUTPUT  --结果说明
AS
DECLARE @Rt INT;
DECLARE @Sql NVARCHAR(max);
SET @Sql='SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY '+@Orders+') AS RowNumber,* FROM ('+@Sqlstr+') t ) t1 WHERE RowNumber BETWEEN ' + CONVERT(VARCHAR,(@intPage-1)*@PageSize+1)+' AND ' + CONVERT(VARCHAR,@intPage*@PageSize);
EXEC sp_executesql @Sql;--得到记录总数
IF @TotalRecord = 0
BEGIN
SET @Sql='SELECT @TotalRecord = COUNT(*) FROM ('+@sqlstr+') t';
EXEC sp_executesql @sql, N'@TotalRecord int OUTPUT', @Rt OUTPUT;
END
ELSE
SET @Rt = @TotalRecord;
RETURN @Rt;

2、

select top 5 *
from t_product
where id not in (select top (5*1) id from t_product)

转载于:https://www.cnblogs.com/pengbp/archive/2012/07/03/2574335.html

简单实用的分页存储过程,支持多字段排序相关推荐

  1. mysql 存储过程复杂查询_SQL分页存储过程 支持连接查询等复杂的SQL

    CREATE PROCEDURE Pagination ( @SQL nvarchar(1024), @PageSize int = 20, --分页大小 @PageIndex int = 0, -- ...

  2. 又快又简单的sql2005分页存储过程

    DECLARE       @rows_per_page       AS       INTEGER    DECLARE       @current_page       AS       IN ...

  3. 【PHP】 数组分页函数、根据字段排序并分页

    if (!function_exists("pageByArr")) {/*** 数组分页函数 核心函数 array_slice* 用此函数之前要先将数据库里面的所有数据按一定的顺 ...

  4. 按任意字段排序的分页存储过程

    CREATE PROCEDURE GetRecordFromPage      @tblName       varchar(255),        -- 表名      @fldName      ...

  5. (转)大数据量分页存储过程效率测试附代码

    大数据量分页存储过程效率测试附代码 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存: ...

  6. sqlserver2000分页存储过程(原创)

    刚刚用了博客园,感觉这里的气氛真的很好,发布这几天写的一个分页存储过程,请dudu多多关照,请各位大牛指正. 功能:海量优化,支持任何字段排序,可支持随机取数据,导出所有数据功能,用了id(整型)比较 ...

  7. MyBatis Plus实现动态字段排序

    利用周末时间,对自己的项目进行了升级,原来使用的是tkmybatis,改为mybatis plus.但是返回数据的格式变了,导致前端页面自带的字段排序失效了,需要刷新表格才会排序,于是决定在服务端实现 ...

  8. sqlserver的order by多个字段排序优先级

    环境:SQLserver2012,数据库比较lower 不要介意, 首先简单的来, 1:单个字段排序 SELECT * FROM dbo.app_merchant_card_limit ORDER B ...

  9. 用aspnetpager实现datalist分页(绝对的简单实用)

    微软的Datalist在做电子相册时候必不可少,但是不支持分页功能,都出到2008了还是没有分页功能,幸好网上有个专业的分页空间aspnetpager,帮我们解决了大问题,说实在话的,网上关于data ...

最新文章

  1. 数学知识--Methods for Non-Linear Least Squares Problems(第一章)
  2. Android从零开始(第三篇)MVP架构搭建
  3. Android之ProgressBar读取文件进度解析
  4. 用户注册功能交互流程
  5. ELSE 技术周刊(2017.11.27期)
  6. Spring MVC,Ajax和JSON第3部分–客户端代码
  7. 解决 U盘安装Windows Server 2012 R2 报错
  8. 关于联想Y400/Y500刷BIOS解锁网卡、单双650M、单双750M超频
  9. 最新!2019 年中国程序员薪资生存调查报告出炉
  10. 手机wap浏览器的设计
  11. 【程序】 一位前辈的编程经历(转)
  12. linux安装过程进入终端,怎么安装国产Linux中标麒麟操作系统?安装全过程分享...
  13. IOS 清理CALayer、CAShapeLayer的sublayers
  14. 如何登录MySQL数据库
  15. python语言程序设计 陈东_程序设计导论python语言实践学习笔记2
  16. 笔记整理英语篇(二) - 日常词汇
  17. GA001-181-14
  18. 对Slim 框架进行总结 一
  19. 博客园申请js权限方式
  20. Material Design icons图标的使用,npm下载及react+typescript引用方式import

热门文章

  1. 微服务实践沙龙-上海站
  2. 优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:htmlcleaner使用案例...
  3. 设计模式基于C#的工程化实现及扩展
  4. Windows Server 2003 导入Java生成的证书,保证iis对CAS的访问
  5. 错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1...
  6. HDU 4339 Query
  7. NoSQL-MongoDB with python
  8. UML学习——类图(三)
  9. 理解正向代理和反向代理
  10. applet实现大文件ftp上传(三)