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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php响应超过三十秒会报错么,如何捕捉致命错误:PHP中超过30秒的最大执行时间...

你唯一的select是增加允许的执行时间(将其设置为0使其无限&#xff0c;但不推荐)或产生一个新的线程&#xff0c;并希望最好的。这是不可捕捉的原因是它并没有真正抛出。 没有一行代码实际上触发了这个错误&#xff0c;而是PHP说&#xff1a;“不&#xff0c;不好意思&#xff…

前端代码标准最佳实践:javascript篇

前言 最近一直重构项目的前端代码&#xff0c;也参考了各种前端代码的最佳实践&#xff0c;目的是让前端的HTML,CSS,Javacript代码更符合标准&#xff0c;有更好的性能&#xff0c;更好的可维护性&#xff0c;尝到了重构后的甜头&#xff0c;也萌生了写这个系列博客的念头。前端…

配置springboot在访问404时自定义返回结果以及统一异常处理

在搭建项目框架的时候用的是springboot&#xff0c;想统一处理异常&#xff0c;但是发现404的错误总是捕捉不到&#xff0c;总是返回的是springBoot自带的错误结果信息。 如下是springBoot自带的错误结果信息&#xff1a; 1 { 2 "timestamp": 1492063521109, 3 &…

nginx配置php 9000,Nginx支持php配置

Nginx本身是不支持对外部程序的直接调用或者解析&#xff0c;所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux 下是socket&#xff0c;(这个socket可以是文件socket&#xff0c;也可以是ip socket)。为了调用CGI程序&#xff0c;还需要一个FastCGI的wra…

用例写到抽筋

这几天是第一次写web类的测试用例&#xff0c;不得不说&#xff0c;写web类的测试用例真是会写死人&#xff0c;每一项都要至少写一个测试用例&#xff0c;就算以一项一个用例来算&#xff0c;一个非常非常简单的网站都要写上上百个测试用例。比如说今天写的测试用例中&#xf…

ansible 判断和循环

标准循环 模式一 - name: add several usersuser: name{{ item }} statepresent groupswheelwith_items:- testuser1- testuser2 orwith_items: "{{ somelist }}" 模式2. 字典循环- name: add several usersuser: name{{ item.name }} statepresent groups{{ item.g…

Windows XP中快速识别真假SVCHOST.EXE

SVCHOST.EXE是基于NT核心技术的操作系统非常重要的进程&#xff0c;它提供许多系统服务&#xff0c;比如远程过程调用系统服务 (RPCSS)、动态主机配置协议&#xff08;DPCH) 服务等与网络相关的服务。现在广大计算机用户普遍使用的Windows XP、Windows 2003等操作系统都涉及该进…

php require 500,thinkphp5出现500错误怎么办

thinkphp5出现500错误&#xff0c;如下图所示&#xff1a;require(): open_basedir restriction in effect. File(/home/wwwroot/pic/thinkphp/start.php) is not within the allowed解决方法&#xff1a;1、我是lnmp1.4 php5.6&#xff0c;php.ini里面的open_basedir 是注释掉…

eclipse从svn导入maven项目变成普通项目解决办法

右击项目-->configure-->Convert to Maven Project转载于:https://www.cnblogs.com/zhanzhuang/p/9105463.html

php安装soap扩展

例&#xff1a; 1、编译安装 解压对应php版本安装包 进入解压后的ext目录 phpize --生成configure文件&#xff0c;报以下错误&#xff0c;可以忽略 ------------------------------------------------------------------------------ Configuring for: PHP Api Version: …

php yaf 教程,Yaf教程2:入门使用

接下来我们通过最简单的“hello yaf”例子说明 Yaf 的用法&#xff0c;然后一步步走向更加复杂的用法。Yaf的PHP官方手册位置是&#xff1a;http://php.net/manual/zh/book.yaf.php&#xff0c;这比鸟哥(Yaf作者)自己博客 http://www.laruence.com/manual/的文档要新&#xff0…

在移动端项目中使用vconsole

1.先在项目中引入 <script type"text/javascript" src"vconsole.min.js"> 2.初始化vConsole window.vConsole new window.VConsole({defaultPlugins: [system, network, element, storage], // 可以在此设定要默认加载的面板maxLogNumber: 1000 });…

如何创建路径别名

在访问页面时&#xff0c;页面地址会以 DocumentRoot所指定的路径为相对路径&#xff0c;但若不想使用指定的路径&#xff0c;则需要创建路径别名。假如DocumentRoot为/var/www/html &#xff0c;现想将/var/www/html/mail 建立别名/web/mail&#xff0c;该如何修改呢&#xff…

matlab矩阵除以一个数字,matlab矩阵中每一行数除以一个数 | 学步园

例如&#xff1a;用a中每一行数除以x中相对应的每一个数x[5 10 6 8 16 6 8 8 22 11];a[4 4 4 5 4 4 4 4 3 46 8 6 2 6 8 8 6 8 64 4 4 4 6 4 4 4 6 44 6 6 4 6 6 6 4 7 410 14 14 10 12 12 12 10 14 123 5 5 3 6 3 3 4 5 44 6 7 4 4 4 4 4 6 64 6 6 6 5 6 5 5 7 613 16 19 16 1…

Redis(四):Spring + JedisCluster操作Redis(集群)

1.maven依赖&#xff1a; <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency> 2.增加spring 配置 <!-- JedisCluster配置 --> <bean …

js对象数组转java对象数组对象数组对象数组对象,前台js数组json字符串,后台json转为对象数组的具体实现...

$("#savaUserSet").click(function(){var JSONArr[];$("i[nameeventName]").each(function() {//获取所有name属性为eventName的i标签,并遍历if(!($(this).hasClass("active"))){var eventCode$(this).attr("id");var eventName$(this…

matlab绘制烟花,[原创]利用MATLAB燃放烟花(礼花)

function firework% 烟花烟花满天飞% CopyRight&#xff1a;xiezhh(谢中华)% 2011.6.25OldHandle findobj( Type, figure, Tag, FireWork ) ;if ishandle(OldHandle)close(OldHandle) ;end% 图形窗口初始化fig figure(units,normalized,position,[0.1 0.1 0.8 0.8],...menuba…

33 -jQuery 属性操作,文档操作(未完成)

转载于:https://www.cnblogs.com/venicid/p/9110130.html

GNU C - 关于8086的内存访问机制以及内存对齐(memory alignment)

接着前面的文章&#xff0c;这篇文章就来说说menory alignment -- 内存对齐. 一、为什么需要内存对齐&#xff1f; 无论做什么事情&#xff0c;我都习惯性的问自己&#xff1a;为什么我要去做这件事情&#xff1f; 是啊&#xff0c;这可能也是个大家都会去想的问题&#xff0c;…

mysql权限说法正确的是,【多选题】下面关于修改 MySQL 配置的说法中,正确的是...

参考答案如下【单选题】4.正常枕先露分娩时&#xff0c;多选的说仰伸发生于()39、题下【单选题】人们常常用来判断一种活动是不是游戏的一项外部指标是( )面关【多选题】S-S法阶段2训练内容包括于修【判断题】痉挛性睑内翻多发生于下睑。配置【判断题】萤火虫不仅成虫会发光,其…