`

自己手写的高效分页存储过程代码

Go 
阅读更多

CREATE PROCEDURE Pages
@TableNames VARCHAR(200), --表名,可以是多个表,但不能用别名
@PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空
@Fields VARCHAR(800), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
@PageSize INT, --每页记录数
@CurrentPage INT, --当前页,0表示第1页
@Filter VARCHAR(200) = '', --条件,可以为空,不用填 where
@Order VARCHAR(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order by
AS
BEGIN
declare @topRow varchar(12)
declare @tempPageSize varchar(12)
if(len(@Order)>0)
begin
set @Order=' order by '+@Order
end
else
begin
set @Order=''
end
if (len(@Filter)<1)
begin
set @Filter=' 1=1'
end
if(@CurrentPage-1<=0)
set @CurrentPage=0
set @topRow= rtrim(ltrim(str(@PageSize*(@CurrentPage-1))))
set @tempPageSize= rtrim(ltrim(str(@PageSize)))
exec('
declare @temptable table(rownum int identity(1,1),Gid varchar(12))'+'
declare @datatable table(Gid varchar(12))'+'
DECLARE @Timer datetime'+'
SET @Timer = getdate() '+'
SET NOCOUNT ON '+'
insert into @temptable(Gid) select '+@PrimaryKey+' from '+@TableNames+' where '+@Filter+@Order+'
insert into @datatable(Gid) select top '+@tempPageSize+'Gid from @temptable where rownum>'+@topRow+'
set rowcount '+@tempPageSize+'

select '+@Fields+' from '+@TableNames+' where '+@Filter+' and '+@PrimaryKey+' in (select Gid from @datatable)'+@Order+'
set rowcount 0'+'
print(DATEDIFF(millisecond, @Timer, getdate()))')
print('insert into @temptable(Gid) select '+@PrimaryKey+' from '+@TableNames+' where '+@Filter+@Order)
print('select '+@Fields+' from '+@TableNames+' where '+@Filter+' and '+@PrimaryKey+' in(select Gid from @datatable) '+@Order)
end
GO

分享到:
评论

相关推荐

    常用的Ajax分页,不用手写分页,节省宝贵时间

    以下是从给定代码片段中提取的实现步骤,该片段展示了如何使用Ajax进行分页处理: 1. **初始化参数**: - `pageSize`定义了每页显示的记录数量。 - `Msg`变量用于存储可能的错误或消息。 2. **处理页面加载事件*...

    纯C++手写的ADO类

    综上所述,这个C++ ADO类库是一个强大的工具,它简化了在C++应用程序中与数据库交互的过程,特别是处理BLOB数据时,提供了插入、读取、转换、查询和分页等功能,广泛适用于工业视觉等需要高效数据库操作的领域。...

    具备JSP MVC 数据分页的信息管理程序.rar

    本信息管理程序利用这些技术实现了数据分页功能,为用户提供了一种高效的数据浏览体验。下面我们将深入探讨这些知识点。 首先,JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现服务器端的业务...

    印像留言系统(c#源代码)

    例如,用户提交留言后,C#代码会捕获这些请求,验证数据的有效性,然后将数据存储到Access数据库中。 Access是微软的一款关系型数据库管理系统,虽然在大型企业级应用中可能不是首选,但因其轻量级、易于使用和良好...

    ssm后台管理系统框架项目

    在本项目中,MyBatis的代码生成器自动生成了操作数据库的基础代码,包括增删改查(CRUD)和分页查询等常见操作,极大地提高了开发效率。开发人员只需配置好Mapper XML文件中的SQL语句,就可以便捷地执行数据库操作,...

    数据源控件与数据绑定控件

    1. **手写代码绑定**:通过设置控件的DataSource属性为数据源,然后调用DataBind()方法完成绑定。 2. **数据源控件绑定**:直接通过DataSourceID属性指定数据源控件的ID。 3. **数据源与其他非数据绑定控件**:通过...

    社团管理系统后台,用java springboot bybitisplus mysql 资源来源网络以及部分开源社区 仅供参考

    "master.zip"则是项目源代码的压缩包,解压后应包含项目的所有Java源码、配置文件、依赖库等,开发者可以通过阅读和修改这些代码来学习Spring Boot和BitisisPlus的使用,以及如何构建一个社团管理后台系统。...

    Devart_dotConnect_for_Oracle_Professional_Version_9.1.131_Downloadly.ir.rar

    3. **强大的对象模型**:它提供了丰富的对象模型,包括Oracle数据库对象(如表、视图、存储过程等)的完整映射,使开发者能够方便地操作数据库结构。 4. **高级数据绑定**:与.NET控件的深度集成,允许开发者轻松...

    phpcms时间轴无需修改模块!

    纯手写的getsql意味着这个模块的查询逻辑是独立编写的,没有依赖phpcms原有的SQL处理方式,这提高了代码的可读性和可维护性。 在实现phpcms时间轴时,开发者可能采取了以下关键步骤和知识点: 1. **数据库设计**:...

    【Java毕业设计】仿照劳力士商城的简单java 后端项目,springboot、mybatis-plus、mysq.zip

    Mybatis-Plus是Mybatis的扩展框架,它简化了Mybatis的使用,提供了包括单表操作、CRUD、关联查询、分页、条件构造等在内的诸多功能。在本项目中,Mybatis-Plus作为数据访问层,帮助开发者快速处理数据库操作,减少了...

    基于Web+ssm+vue的敏捷工贸公司销售管理系统.zip

    3. **MyBatis**:MyBatis是一个持久层框架,它允许开发者编写SQL语句并将其与Java对象映射,减少了手写JDBC代码的工作量,同时保持了SQL的灵活性。 4. **SpringBoot**:SpringBoot是Spring的扩展,旨在简化Spring...

    医院就诊管理系统SpringBoot后端代码+sql

    系统通过JDBC接口与MySQL进行交互,MybatisPlus则在此基础上提供了一套简洁的ORM(对象关系映射)解决方案,简化了对数据库的操作,如增删改查、分页查询等,同时支持动态SQL,提高了开发效率。 系统的主要功能模块...

    网易校园招聘历年经典面试题汇总:C++研发1

    7. **手写代码:二叉树的镜像**:可以使用递归或层次遍历来实现二叉树的镜像操作,即交换左右子树。 8. **虚拟内存作用**:虚拟内存为每个进程提供独立的内存空间,防止地址冲突,同时通过分页或分段机制实现内存...

    javaWeb物资管理系统项目源码.zip

    这个项目的核心目标是提供一个高效、用户友好的界面,以便于库存控制、采购、领用、退库等操作。下面我们将深入探讨该项目中涉及的关键技术和知识点。 1. **Java后端开发**: - **Servlet与JSP**:作为JavaWeb的...

Global site tag (gtag.js) - Google Analytics