SQLServer分页查询通用存储过程_sqlserver自定义分页存储-程序员宅基地

技术标签: sqlserver  MySql  go  mysql  存储  table  sql  

 

自开始做项目以来,一直在用。这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用。

CREATE PROCEDURE prcPageResult
-- 获得某一页的数据 --
@currPage int = 1,                         --当前页页码 (即Top currPage)
@showColumn varchar(2000) = '*',           --需要得到的字段 (即 column1,column2,......)
@tabName varchar(2000),                    --需要查看的表名 (即 from table_name)
@strCondition varchar(2000) = '',          --查询条件 (即 where condition......) 不用加where关键字
@ascColumn varchar(100) = '',              --排序的字段名 (即 order by column asc/desc)
@bitOrderType bit = 0,                     --排序的类型 (0为升序,1为降序)
@pkColumn varchar(50) = '',                --主键名称
@pageSize int = 20                         --分页大小

AS
BEGIN -- 存储过程开始
-- 该存储过程需要用到的几个变量 --
DECLARE @strTemp varchar(1000)
DECLARE @strSql varchar(4000)              --该存储过程最后执行的语句
DECLARE @strOrderType varchar(1000)        --排序类型语句 (order by column asc或者order by column desc)

BEGIN
IF @bitOrderType = 1   -- bitOrderType=1即执行降序
BEGIN
    SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
    SET @strTemp = '<(SELECT min'
END
ELSE
BEGIN
    SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
    SET @strTemp = '>(SELECT max'
END

IF @currPage = 1    -- 如果是第一页
BEGIN
    IF @strCondition != ''
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
            ' WHERE '+@strCondition+@strOrderType
    ELSE
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType
END

ELSE    -- 其他页
BEGIN
    IF @strCondition !=''
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
        ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+
        ' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
    ELSE
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
        ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+
        ' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
END

END
EXEC (@strSql)
END  -- 存储过程结束


GO

 调用方法:

prcPageResult 1,'*','TableName','','CreateDate',1,'PkID',25

 上面表示,查询表TableName的所有字段,前25条记录,因为是第一页,排序字段为CreateDate,降序排列,主键是PkID。这个存储过程的功能比较强大,用在项目中非常的适用。不信您可以试试看,尤其是在百万级数据上,他的优势就显露无疑了,当然,这段代码是可以转换成MySql中的存储过程的,不过,在这里就不给大家了,你们可以自己试着转换看看。

下面的存储过程查询表的记录数:

CREATE PROC prcRowsCount
@tabName varchar(200),            --需要查询的表名
@colName varchar(200)='*',        --需要查询的列名
@condition varchar(200)=''       --查询条件
AS
BEGIN
    DECLARE @strSql varchar(255)
    IF @condition = ''
        SET @strSql='select count('+@colName+') from '+@tabName
    ELSE
        SET @strSql='select count('+@colName+') from '+@tabName+' where '+@condition
    EXEC (@strSql)
END


GO

还有删除记录的通用存储过程和查询单条记录的通用存储过程在这里就不奉送了,感谢提供原通用分页查询存储过程的哥们,谢谢。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lihongjian944043440/article/details/6978456

智能推荐

C语言程序实例100个_程序编程案例-程序员宅基地

文章浏览阅读761次。【程序29】题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。程序分析:学会分解出每一位数,如下解释:2.程序源代码:main( )a=x/10000;分解出万位分解出千位分解出百位分解出十位/ e=x%10;分解出个位/ if (a!else if (b!else if (c!else if (d!else if (e!【程序30】题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。_程序编程案例

新手如何有效避免Pybind11使用的各种坑【undefine symbol xxx, dynamic module does not define xxx等】_pybind11报错-程序员宅基地

文章浏览阅读1.2k次,点赞21次,收藏19次。新手使用pybind11的过程中遇到的一些坑及解决办法!_pybind11报错

Linux串口调试助手_linux 串口调试助手-程序员宅基地

文章浏览阅读3.1k次。基于网上资料对相关概念做整理汇总,部分内容引用自文后文章。_linux 串口调试助手

(附源码)ssm基于微信小程序的社区老人健康管理服务系统的设计与实现 毕业设计011513_基于微信小程序的社区管理系统设计论文-程序员宅基地

文章浏览阅读2k次,点赞7次,收藏30次。对于本社区老人健康管理服务系统的设计来说,通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。社区老人健康管理服务系统使用Java语言,采用基于MVVM模式的SSM技术进行开发,使用 Eclipse 2017 CI 10 编译器编写,数据方面主要采用的是微软的MySQL关系型数据库来作为数据存储媒介,配合前台HTML+CSS 技术完成系统的开发。具体根据社区老人健康管理服务系统的现状来进行开发的,具体根据用户需求实现社区老人健康管理服务系统网络化的管理,各类信息有序地进行存储...._基于微信小程序的社区管理系统设计论文

Java中的Action、Service和DAO层功能区分及示例解释-程序员宅基地

文章浏览阅读555次。Action/Service/DAO简介:Action是管理业务(Service)调度和管理跳转的。Service是管理具体的功能的。Action只负责管理,而Service负责实施。DAO只完成增删改查,虽然可以1-n,n-n,1-1关联,模糊、动态、子查询都可以。但是无论多么复杂的查询,dao只是封装增删改查。至于增删查改如何去实现一个功能,dao是不管的。总结这三者,通过例子来解释:Acti..._java中action

Servlet详解-程序员宅基地

文章浏览阅读321次。Servlet (Server Applet),全称Java Servlet。是用Java编写的服务器端程序,其,生成动态的Web内容。Servlet运行于支持Java的应用服务器中(如Tomcat等)。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下,servlet只用来扩展基于HTTP协议的服务器。

随便推点

基于java的健身房管理系统设计与实现_java能查看用户的健身情况的健身管理系统-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏18次。基于Java的健身房管理系统性能评估是对系统在特定工作负载下的响应速度和资源利用率进行评估和分析,旨在验证系统是否能够满足用户在实际使用中的性能需求。1、并发性能评估:并发性能是指系统在多用户同时访问的情况下的表现。通过模拟多个用户同时进行操作,评估系统的并发性能。可以观察系统是否能够正确处理并发请求,同时保持较好的响应速度。通过增加并发用户数,可以评估系统的并发处理能力和性能瓶颈。通过性能测试工具和性能监控工具,可以测量系统在不同并发负载下的响应时间、吞吐量和资源利用率。_java能查看用户的健身情况的健身管理系统

Haddop:HA高可用_haddp 高可用-程序员宅基地

文章浏览阅读1.1w次。Hadoop集群的高可用:HDFS的HA和YARN的HA_haddp 高可用

汇编的标志寄存器_flag中psw啥意思-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏18次。它被称为FLAG,也称为PSW (Processor Status Word)。共9个标志。其中有6个状态标志位:OF、SF、ZF、AF、PF、CF,及3个控制标志位DF、IF、TF。PSW在实现IF、FOR这类需要进行条件判断的语句时非常重要。为了能熟练编程,我们需要掌握以下这些细节。(汇编里细节很重要)符号标志S(Sign Flag)。当指令执行结果的高位(字节操作中的D7位或字操作中..._flag中psw啥意思

计算机桌面输入法没有了怎么办,输入法不见了怎么办,小编教你电脑输入法不见了怎么办...-程序员宅基地

文章浏览阅读971次。一般新手在遇到这样的问题之后,会毫不犹豫的选择重启,但是重启之后依然不能解决这个问题,究竟是哪里出了问题呢?桌面输入法不见了是什么原因?该怎么修复电脑输入法不见了呢?下面,小编给大家讲解电脑输入法不见了的处理经验。输入法是电脑常见的一款软件,它可以辅助我们打出自己想写的字,但是有时候我们想要打字时,却发现输入法不见了,那么当你遇到这种情况该怎么办呢?要是你不知道怎么处理的话,就来看看小编为大伙整理..._桌面输入法不见了打不了字怎么办

python输出系统时间到文件_Python获取并输出当前日期时间-程序员宅基地

文章浏览阅读1.1k次。取得当前时间戳import timeprint time.time()格式化时间戳为标准格式print time.strftime('%Y.%m.%d',time.localtime(time.time()))获取30天前的时间(通过加减秒数来获取现在或者未来某个时间点)print time.strftime('%Y.%m.%d',time.localtime(time.time()-259200..._python 输出时间到文档里

Buck电路 (PWM实现与闭环反馈) 电力系统仿真_buck电路带反馈控制-程序员宅基地

文章浏览阅读962次,点赞2次,收藏11次。Buck电路 (PWM实现与闭环反馈) 电力系统仿真_buck电路带反馈控制