`
suchj
  • 浏览: 147457 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通用分页存储过程——节省你的时间,延长程序员的寿命!<转>

    博客分类:
  • sql
阅读更多
作者原话:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://51cndo.blog.51cto.com/491222/102320
昨天写存储过程时遇到一个麻烦,再搜寻答案时搜到了“通用存储过程”,但只看到部分残缺代码,多方参考后,鄙人对其进行总结规范,得出以下规范存储过程,竟然把本人项目里50多个查询存储过程代替!不敢独享,遂贴出与大家分享,希望对大家有所帮助!!

该存储过程几乎可以涵盖所有查询存储过程(目前本人还没有发现不能使用的)

参数:分页大小,第几页,需要得到的字段 ,需要查询的表 , 查询条件,排序的字段名,排序的类型,主键名称

输入参数即可查询,无论是查询一条记录还是查询多条记录,无论是分页还是不分页,无论是需要查询条件还是不需要查询条件……,都可使用此通用的存储过程!!!
通用性相当好!!
/*通用分页存储过程*/
USE HotelManagementSystem
GO
IF EXISTS(SELECT * FROM sys.objects WHERE NAME='cndoup_GetPageOfRecords')
  DROP PROCEDURE cndoup_GetPageOfRecords
GO
--创建存储过程
CREATE PROCEDURE cndoup_GetPageOfRecords
  @pageSize int = 20,                                 --分页大小
  @currentPage int ,                                  --第几页
  @columns varchar(1000) = '*',                       --需要得到的字段 
  @tableName varchar(100),                            --需要查询的表    
  @condition varchar(1000) = '',                      --查询条件, 不用加where关键字
  @ascColumn varchar(100) = '',                       --排序的字段名 (即 order by column asc/desc)
  @bitOrderType bit = 0,                              --排序的类型 (0为升序,1为降序)
  @pkColumn varchar(50) = ''                          --主键名称

AS
BEGIN                                                 --存储过程开始
  DECLARE @strTemp varchar(300)
  DECLARE @strSql varchar(5000)                       --该存储过程最后执行的语句
  DECLARE @strOrderType varchar(1000)                --排序类型语句 (order by column asc或者order by column desc)

  BEGIN
    IF @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 @currentPage = 1            --第一页
      BEGIN
        IF @condition != ''
          SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
            ' WHERE '+@condition+@strOrderType
        ELSE
          SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+@strOrderType
      END

    ELSE                  -- 其他页
      BEGIN
        IF @condition !=''
          SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
          ' WHERE '+@condition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+
          ' '+@pkColumn+' FROM '+@tableName'where'+@condition+@strOrderType+') AS TabTemp)'+@strOrderType
        ELSE
          SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
          ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+' '+@pkColumn+
          ' FROM '+@tableName+@strOrderType+') AS TabTemp)'+@strOrderType
      END

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

--分页得到客房信息列表测试
EXEC cndoup_GetPageOfRecords 20,2,'房间号=RoomNum,
            房间状态=(SELECT RoomTypeDes FROM RoomType WHERE RoomTypeID=Room.RoomTypeID),
            房间状态=(SELECT RSDec FROM RoomStatus WHERE RoomStatusID=Room.RoomStatusID),
            床位数=BedNum,
            楼层=Floors,
            描述=RoomDes,
            备注=RoomRemark','Room','','RoomID',0,'RoomID'


--根据房间号得到客房信息测试
EXEC cndoup_GetPageOfRecords 1,1,'房间号=RoomNum,
            房间状态=(SELECT RoomTypeDes FROM RoomType WHERE RoomTypeID=Room.RoomTypeID),
            房间状态=(SELECT RSDec FROM RoomStatus WHERE RoomStatusID=Room.RoomStatusID),
            BedNum,
            Floors,
            RoomDes,
            RoomRemark','Room','RoomNum=304','RoomID',0,'RoomID'


--·  得到客房类型信息列表测试
EXEC cndoup_GetPageOfRecords 10,1,'RoomTypeDes,Price,Area,AddBed,MaxBedNum,BedPrice,HourRoom,HourPrice,Remark','RoomType','','RoomTypeID',0,'RoomTypeID'


本文出自 “cndo” 博客,请务必保留此出处http://51cndo.blog.51cto.com/491222/102320
分享到:
评论

相关推荐

    通用分页存储过程——节省你的生命,N个存储过程变一个!!该存储过程几乎可以涵盖所有查询存储过程(目前本人还没有发现不能使用的)

    该存储过程几乎可以涵盖所有查询存储...输入参数即可查询,无论是查询一条记录还是查询多条记录,无论是分页还是不分页,无论是需要查询条件还是不需要查询条件……,都可使用此通用的存储过程!!! 通用性相当好!!

    SQL分页存储过程.rar

    【资源介绍】:SQL分页存储过程&lt;br&gt;【备注】:&lt;br&gt;亲爱的下载用户:&lt;br&gt; 谢谢您光临CSDN阿Q资源中心!&lt;br&gt; 本中心发布的资源均是经过本人测试通过后才发布的,请放心下载。如果您有不清楚的问题或者建议,请您通过...

    慕逸留言板1.0

    几点说明:&lt;br&gt; &lt;br&gt; 1.数据库的主机名、用户名、密码和数据库名请先在common.inc.php中修改。&lt;br&gt; &lt;br&gt; 2.本程序使用mysql建表,使用时请先按上述要求修改配置,然后运行里面的sql_setup.php即可。&lt;br&gt; &lt;br&gt; 3.留言...

    sql Server 通用分页存储过程

    sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程

    <li>列表的分页及Table的分页

    关于&lt;li&gt;列表的分页及Table的分页 js实现 适用静态分页

    分页组件!!!!

    这个晚上发了好多东西.....&lt;br&gt;这个分页组件更不同谈了..&lt;br&gt;为JSP分页烦恼的同志们来下,&lt;br&gt;为分页占RESULTSET的同志们更要来&lt;br&gt;&lt;br&gt;组件的科重用性很高的哦!!&lt;br&gt;里面更有详细的说明!!&lt;br&gt;唉. 送你们了

    MyPager分页控件

    yPager分页控件 正式推出第一个版本 T 1.1.5&lt;br&gt;&lt;br&gt;&lt;br&gt;开发环境:VS2003+Windows2003&lt;br&gt;概述:一款采用URL进行分页的控件,支持在Vs模式下进行调试,支持Repeater,DataList,DataGrid等控件&lt;br&gt;是否开源:是&lt;br...

    分页控件1.2.4.3

    不足 &lt;br&gt; 控件暂时只支持SQL数据库其他数据库的支持接口以完成还没来得及写,有时间我会升级&lt;br&gt; 控件暂时不支持存储过程&lt;br&gt; 现在发布的也只是个BATE版有BUG欢迎指正&lt;br&gt; 邮箱:wensifww@163.com&lt;br&gt; QQ:24754991...

    动网论坛文档插件 v1.2 for dvbbs7.0 sp2

    升级说明:&lt;br&gt; v1.2 已修改了分页显示代码,用以支持AC版动网论坛&lt;br&gt; v1.1 已修改了显示回收站帖子的问题&lt;br&gt; &lt;br&gt; &lt;br&gt; 安装步骤:&lt;br&gt; 安装很简单!只需将 archive.css、Archive_index.asp、Archive_view.asp三...

    很适合菜鸟学习的ASP.NET( C# )留言簿

    开发环境:VS2008 (C#)+ WindowsXP + SQL Server 2005&lt;br&gt;主要功能:留言、显示历史访问量、显示当前在线人数、显示当前时间、分页、记录留言页数 。功能比较简单,比较适合菜鸟级的朋友们学习研究!&lt;br&gt;&lt;br&gt;联系...

    C#编程经验技巧宝典

    10&lt;br&gt;&lt;br&gt;0023 如何添加引用第3方控件 11&lt;br&gt;&lt;br&gt;0024 如何生成DLL文件 11&lt;br&gt;&lt;br&gt;0025 如何使用不安全代码 11&lt;br&gt;&lt;br&gt;第2章 语言基础 13&lt;br&gt;&lt;br&gt;2.1 注释 14&lt;br&gt;&lt;br&gt;0026 如何对代码进行注释 14&lt;br&gt;...

    JSP网络编程从基础到实践

    &lt;br&gt; 实例48 追加记录&lt;br&gt; 实例49 删除记录&lt;br&gt; 实例50 更新记录&lt;br&gt; 实例51 分页显示记录&lt;br&gt; 实例52 调用存储过程&lt;br&gt; 实例53 事务处理&lt;br&gt; 实例54 利用连接池访问数据库&lt;br&gt;JSP中JavaBean的应用&lt;br&gt; 实例55 在JSP...

    Java JDK实例宝典

    &lt;br&gt;第1章 Java基础 &lt;br&gt;1.1 转换基本数据类型 &lt;br&gt;1.2 Java的运算符 &lt;br&gt;1.3 控制程序的流程 &lt;br&gt;1.4 计算阶乘 &lt;br&gt;1.5 实现命令行程序 &lt;br&gt;第2章 Java面向对象程序设计 &lt;br&gt;2. 1 复数类 &lt;br&gt;2. 2 equals.chashCode...

    jive.chm

    &lt;br&gt;系统设计&lt;br&gt; 1 jive设计思路 &lt;br&gt; 2 jive的工作内幕 &lt;br&gt; 3 Jive源代码研究 &lt;br&gt; 4 Jive中的设计模式 &lt;br&gt; 5 jive学习笔记 &lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;设计模式&lt;br&gt; 1 大道至简-Java之23种模式一点就通 &lt;br&gt; 2 设计模式...

    SqlPage 1.2.5.3

    不足 &lt;br&gt; 控件暂时只支持SQL数据库其他数据库的支持接口以完成还没来得及写,有时间我会升级&lt;br&gt; 控件暂时不支持存储过程&lt;br&gt; 现在发布的也只是个BATE版有BUG欢迎指正&lt;br&gt; 邮箱:wensifww@163.com&lt;br&gt; QQ:24754991...

    SqlPage1.2.6.5版本升级

    不足 &lt;br&gt; 控件暂时只支持SQL数据库其他数据库的支持接口以完成还没来得及写,有时间我会升级&lt;br&gt; 控件暂时不支持存储过程&lt;br&gt; 现在发布的也只是个BATE版有BUG欢迎指正&lt;br&gt; 邮箱:wensifww@163.com&lt;br&gt; QQ:24754991...

    JSP实践之旅.exe

    Tomcat.JSP&lt;br&gt;JSWDK环境安装与配置&lt;br&gt;Resin服务器平台介绍&lt;br&gt;Resin在...&lt;br&gt;通用信息发布程序&lt;br&gt;JSP概述及音乐店设计&lt;br&gt;不用odbc直接连接SQL Server&lt;br&gt;jsp的出错处理&lt;br&gt;jsp的wap应用&lt;br&gt;jsp实现购物程序&lt;br&gt;用...

    EXT 中文帮助手册

    58&lt;br&gt;练一练 60&lt;br&gt;动态添加菜单按钮到Toolbar 61&lt;br&gt;更方便的是 61&lt;br&gt;下一步是 62&lt;br&gt;模板(Templates)起步 62&lt;br&gt;第一步 您的HTML模板 62&lt;br&gt;第二步,将数据加入到模板中 62&lt;br&gt;下一步 63&lt;br&gt;学习利用模板...

    SqlPage 1.2.10.5 版本

    不足 &lt;br&gt; 控件暂时只支持SQL数据库其他数据库的支持接口以完成还没来得及写,有时间我会升级&lt;br&gt; 控件暂时不支持存储过程&lt;br&gt; 现在发布的也只是个BATE版有BUG欢迎指正&lt;br&gt; 邮箱:wensifww@163.com&lt;br&gt; QQ:24754991...

Global site tag (gtag.js) - Google Analytics