简单实用的分页存储过程,支持多字段排序
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
简单实用的分页存储过程,支持多字段排序相关推荐
- mysql 存储过程复杂查询_SQL分页存储过程 支持连接查询等复杂的SQL
CREATE PROCEDURE Pagination ( @SQL nvarchar(1024), @PageSize int = 20, --分页大小 @PageIndex int = 0, -- ...
- 又快又简单的sql2005分页存储过程
DECLARE @rows_per_page AS INTEGER DECLARE @current_page AS IN ...
- 【PHP】 数组分页函数、根据字段排序并分页
if (!function_exists("pageByArr")) {/*** 数组分页函数 核心函数 array_slice* 用此函数之前要先将数据库里面的所有数据按一定的顺 ...
- 按任意字段排序的分页存储过程
CREATE PROCEDURE GetRecordFromPage @tblName varchar(255), -- 表名 @fldName ...
- (转)大数据量分页存储过程效率测试附代码
大数据量分页存储过程效率测试附代码 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750 内存: ...
- sqlserver2000分页存储过程(原创)
刚刚用了博客园,感觉这里的气氛真的很好,发布这几天写的一个分页存储过程,请dudu多多关照,请各位大牛指正. 功能:海量优化,支持任何字段排序,可支持随机取数据,导出所有数据功能,用了id(整型)比较 ...
- MyBatis Plus实现动态字段排序
利用周末时间,对自己的项目进行了升级,原来使用的是tkmybatis,改为mybatis plus.但是返回数据的格式变了,导致前端页面自带的字段排序失效了,需要刷新表格才会排序,于是决定在服务端实现 ...
- sqlserver的order by多个字段排序优先级
环境:SQLserver2012,数据库比较lower 不要介意, 首先简单的来, 1:单个字段排序 SELECT * FROM dbo.app_merchant_card_limit ORDER B ...
- 用aspnetpager实现datalist分页(绝对的简单实用)
微软的Datalist在做电子相册时候必不可少,但是不支持分页功能,都出到2008了还是没有分页功能,幸好网上有个专业的分页空间aspnetpager,帮我们解决了大问题,说实在话的,网上关于data ...
最新文章
- 数学知识--Methods for Non-Linear Least Squares Problems(第一章)
- Android从零开始(第三篇)MVP架构搭建
- Android之ProgressBar读取文件进度解析
- 用户注册功能交互流程
- ELSE 技术周刊(2017.11.27期)
- Spring MVC,Ajax和JSON第3部分–客户端代码
- 解决 U盘安装Windows Server 2012 R2 报错
- 关于联想Y400/Y500刷BIOS解锁网卡、单双650M、单双750M超频
- 最新!2019 年中国程序员薪资生存调查报告出炉
- 手机wap浏览器的设计
- 【程序】 一位前辈的编程经历(转)
- linux安装过程进入终端,怎么安装国产Linux中标麒麟操作系统?安装全过程分享...
- IOS 清理CALayer、CAShapeLayer的sublayers
- 如何登录MySQL数据库
- python语言程序设计 陈东_程序设计导论python语言实践学习笔记2
- 笔记整理英语篇(二) - 日常词汇
- GA001-181-14
- 对Slim 框架进行总结 一
- 博客园申请js权限方式
- Material Design icons图标的使用,npm下载及react+typescript引用方式import
热门文章
- 微服务实践沙龙-上海站
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:htmlcleaner使用案例...
- 设计模式基于C#的工程化实现及扩展
- Windows Server 2003 导入Java生成的证书,保证iis对CAS的访问
- 错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1...
- HDU 	4339	 Query
- NoSQL-MongoDB with python
- UML学习——类图(三)
- 理解正向代理和反向代理
- applet实现大文件ftp上传(三)