当前位置: 首页 > news >正文

2分分页处理存储过程通用存储过程

 

  1 None.gif -- /*----- 对数据进行了2分处理使查询前半部分数据与查询后半部分数据性能相同 -------*/
  2 None.gif    -- /*-----存储过程 分页处理  2005-04-21修改 添加Distinct查询功能-------*/
  3 None.gif    -- /*-----存储过程 分页处理  2005-05-18修改 多字段排序规则问题-------*/
  4 None.gif    -- /*-----存储过程 分页处理  2005-06-15修改 多字段排序修改-------*/
  5 None.gif    ALTER   PROCEDURE  dbo.proc_ListPage
  6 None.gif  (
  7 None.gif   @tblName       nvarchar ( 200 ),                 -- --要显示的表或多个表的连接
  8 None.gif    @fldName       nvarchar ( 500 =   ' * ' ,         -- --要显示的字段列表
  9 None.gif    @pageSize      int   =   1 ,                     -- --每页显示的记录个数
 10 None.gif    @page          int   =   10 ,                     -- --要显示那一页的记录
 11 None.gif   @pageCount      int   =   1  output,            -- --查询结果分页后的总页数
 12 None.gif   @Counts      int   =   1  output,               -- --查询到的记录数
 13 None.gif   @fldSort      nvarchar ( 200 =   null ,         -- --排序字段列表或条件
 14 None.gif   @Sort          bit   =   0 ,                     -- --排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')
 15 None.gif   @strCondition      nvarchar ( 1000 =   null ,     -- --查询条件,不需where
 16 None.gif   @ID          nvarchar ( 150 ),                 -- --主表的主键
 17 None.gif   @Dist                   bit   =   0             -- --是否添加查询字段的 DISTINCT 默认0不添加/1添加
 18 None.gif  )
 19 None.gif  AS
 20 None.gif  SET  NOCOUNT  ON
 21 None.gif  Declare   @sqlTmp   nvarchar ( 1000 )             -- --存放动态生成的SQL语句
 22 None.gif   Declare   @strTmp   nvarchar ( 1000 )             -- --存放取得查询结果总数的查询语句
 23 None.gif   Declare   @strID       nvarchar ( 1000 )        -- --存放取得查询开头或结尾ID的查询语句
 24 None.gif  
 25 None.gif  Declare   @strSortType   nvarchar ( 10 )         -- --数据排序规则A
 26 None.gif   Declare   @strFSortType   nvarchar ( 10 )         -- --数据排序规则B
 27 None.gif  
 28 None.gif  Declare   @SqlSelect   nvarchar ( 50 )          -- --对含有DISTINCT的查询进行SQL构造
 29 None.gif   Declare   @SqlCounts   nvarchar ( 50 )          -- --对含有DISTINCT的总数查询进行SQL构造
 30 None.gif  
 31 None.gif 
 32 None.gif  if   @Dist    =   0
 33 None.gif  begin
 34 None.gif      set   @SqlSelect   =   ' select  '
 35 None.gif      set   @SqlCounts   =   ' Count(*) '
 36 None.gif  end
 37 None.gif  else
 38 None.gif  begin
 39 None.gif      set   @SqlSelect   =   ' select distinct  '
 40 None.gif      set   @SqlCounts   =   ' Count(DISTINCT  ' + @ID + ' ) '
 41 None.gif  end
 42 None.gif 
 43 None.gif 
 44 None.gif  if   @Sort = 0
 45 None.gif  begin
 46 None.gif      set   @strFSortType = '  ASC  '
 47 None.gif      set   @strSortType = '  DESC  '
 48 None.gif  end
 49 None.gif  else
 50 None.gif  begin
 51 None.gif      set   @strFSortType = '  DESC  '
 52 None.gif      set   @strSortType = '  ASC  '
 53 None.gif  end
 54 None.gif 
 55 None.gif 
 56 None.gif 
 57 None.gif  -- ------生成查询语句--------
 58 None.gif   -- 此处@strTmp为取得查询结果数量的语句
 59 None.gif   if   @strCondition   is   null   or   @strCondition = ''       -- 没有设置显示条件
 60 None.gif   begin
 61 None.gif      set   @sqlTmp   =    @fldName   +   '  From  '   +   @tblName
 62 None.gif      set   @strTmp   =   @SqlSelect + '  @Counts= ' + @SqlCounts + '  FROM  ' + @tblName
 63 None.gif      set   @strID   =   '  From  '   +   @tblName
 64 None.gif  end
 65 None.gif  else
 66 None.gif  begin
 67 None.gif      set   @sqlTmp   =   +   @fldName   +   ' From  '   +   @tblName   +   '  where (1>0)  '   +   @strCondition
 68 None.gif      set   @strTmp   =   @SqlSelect + '  @Counts= ' + @SqlCounts + '  FROM  ' + @tblName   +   '  where (1>0)  '   +   @strCondition
 69 None.gif      set   @strID   =   '  From  '   +   @tblName   +   '  where (1>0)  '   +   @strCondition
 70 None.gif  end
 71 None.gif 
 72 None.gif  -- --取得查询结果总数量-----
 73 None.gif   exec  sp_executesql  @strTmp ,N ' @Counts int out  ' , @Counts  out
 74 None.gif  declare   @tmpCounts   int
 75 None.gif  if   @Counts   =   0
 76 None.gif      set   @tmpCounts   =   1
 77 None.gif  else
 78 None.gif      set   @tmpCounts   =   @Counts
 79 None.gif 
 80 None.gif      -- 取得分页总数
 81 None.gif       set   @pageCount = ( @tmpCounts + @pageSize - 1 ) / @pageSize
 82 None.gif 
 83 ExpandedBlockStart.gifContractedBlock.gif      /**/ /**/ /**/ /**/ /**/ /**/ /**/ /**当前页大于总页数 取最后一页**/
 84 None.gif      if   @page > @pageCount
 85 None.gif          set   @page = @pageCount
 86 None.gif 
 87 None.gif      -- /*-----数据分页2分处理-------*/
 88 None.gif       declare   @pageIndex   int   -- 总数/页大小
 89 None.gif       declare   @lastcount   int   -- 总数%页大小 
 90 None.gif  
 91 None.gif      set   @pageIndex   =   @tmpCounts / @pageSize
 92 None.gif      set   @lastcount   =   @tmpCounts % @pageSize
 93 None.gif      if   @lastcount   >   0
 94 None.gif          set   @pageIndex   =   @pageIndex   +   1
 95 None.gif      else
 96 None.gif          set   @lastcount   =   @pagesize
 97 None.gif 
 98 None.gif      -- //***显示分页
 99 None.gif       if   @strCondition   is   null   or   @strCondition = ''       -- 没有设置显示条件
100 None.gif      begin
101 None.gif         if   @pageIndex < 2   or   @page <= @pageIndex   /   2   +   @pageIndex   %   2     -- 前半部分数据处理
102 None.gif              begin  
103 None.gif                 set   @strTmp = @SqlSelect + '  top  ' +   CAST ( @pageSize   as   VARCHAR ( 4 )) + '   ' +   @fldName + '  from  ' + @tblName
104 None.gif                         + '  where  ' + @ID + '  not in( ' +   @SqlSelect + '  top  ' +   CAST ( @pageSize * ( @page - 1 as   Varchar ( 20 ))  + '   ' +   @ID   + '  from  ' + @tblName
105 None.gif                         + '  order by  ' +   @fldSort   + '   ' +   @strFSortType + ' ) '
106 None.gif                         + '  order by  ' +   @fldSort   + '   ' +   @strFSortType  
107 None.gif             end
108 None.gif         else
109 None.gif             begin
110 None.gif             set   @page   =   @pageIndex - @page + 1   -- 后半部分数据处理
111 None.gif                  if   @page   <=   1   -- 最后一页数据显示
112 None.gif                      set   @strTmp = @SqlSelect + '  * from ( ' + @SqlSelect + '  top  ' +   CAST ( @lastcount   as   VARCHAR ( 4 )) + '   ' +   @fldName + '  from  ' + @tblName
113 None.gif                         + '  order by  ' +   @fldSort   + '   ' +   @strSortType + ' ) AS TempTB ' + '  order by  ' +   @fldSort   + '   ' +   @strFSortType  
114 None.gif                 else                 
115 None.gif                     set   @strTmp = @SqlSelect + '  * from ( ' + @SqlSelect + '  top  ' +   CAST ( @pageSize   as   VARCHAR ( 4 )) + '   ' +   @fldName + '  from  ' + @tblName
116 None.gif                         + '  where  ' + @ID + '  not in( ' +   @SqlSelect + '  top  ' +   CAST ( @pageSize * ( @page - 2 ) + @lastcount   as   Varchar ( 20 ))  + '   ' +   @ID   + '  from  ' + @tblName
117 None.gif                         + '  order by  ' +   @fldSort   + '   ' +   @strSortType + ' ) '
118 None.gif
119 None.gif                         + '  order by  ' +   @fldSort   + '   ' +   @strSortType + ' ) AS TempTB ' + '  order by  ' +   @fldSort   + '   ' +   @strFSortType  
120 None.gif             end
121 None.gif     end
122 None.gif
123 None.gif     else   -- 有查询条件
124 None.gif      begin
125 None.gif         if   @pageIndex < 2   or   @page <= @pageIndex   /   2   +   @pageIndex   %   2     -- 前半部分数据处理
126 None.gif          begin  
127 None.gif                 set   @strTmp = @SqlSelect + '  top  ' +   CAST ( @pageSize   as   VARCHAR ( 4 )) + '   ' +   @fldName   + '  from   ' + @tblName
128 None.gif                     + '  where  ' + @ID + '  not in( ' +   @SqlSelect + '  top  ' +   CAST ( @pageSize * ( @page - 1 as   Varchar ( 20 ))  + '   ' +   @ID   + '  from  ' + @tblName
129 None.gif                     + '  Where (1>0)  '   +   @strCondition   +   '  order by  ' +   @fldSort   + '   ' +   @strFSortType + ' ) '
130 None.gif                     + '   '   +   @strCondition   +   '  order by  ' +   @fldSort   + '   ' +   @strFSortType                  
131 None.gif         end
132 None.gif         else
133 None.gif         begin  
134 None.gif             set   @page   =   @pageIndex - @page + 1   -- 后半部分数据处理
135 None.gif              if   @page   <=   1   -- 最后一页数据显示
136 None.gif                      set   @strTmp = @SqlSelect + '  * from ( ' + @SqlSelect + '  top  ' +   CAST ( @lastcount   as   VARCHAR ( 4 )) + '   ' +   @fldName + '  from  ' + @tblName
137 None.gif                         + '  where (1>0)  ' +   @strCondition   + '  order by  ' +   @fldSort   + '   ' +   @strSortType + ' ) AS TempTB ' + '  order by  ' +   @fldSort   + '   ' +   @strFSortType
138 None.gif             else
139 None.gif                     set   @strTmp = @SqlSelect + '  * from ( ' + @SqlSelect + '  top  ' +   CAST ( @pageSize   as   VARCHAR ( 4 )) + '   ' +   @fldName + '  from  ' + @tblName
140 None.gif                         + '  where  ' + @ID + '  not in( ' +   @SqlSelect + '  top  ' +   CAST ( @pageSize * ( @page - 2 ) + @lastcount   as   Varchar ( 20 ))  + '   ' +   @ID   + '  from  ' + @tblName
141 None.gif                         + '  where (1>0)  ' +   @strCondition   + '  order by  ' +   @fldSort   + '   ' +   @strSortType + ' ) '
142 None.gif                         +   @strCondition   + '  order by  ' +   @fldSort   + '   ' +   @strSortType + ' ) AS TempTB ' + '  order by  ' +   @fldSort   + '   ' +   @strFSortType  
143 None.gif         end     
144 None.gif     end
145 None.gif
146 None.gif -- ----返回查询结果-----
147 None.gif exec  sp_executesql  @strTmp
148 None.gif -- print @strTmp
149 None.gif SET  NOCOUNT  OFF

相关文章:

  • 洛谷P3379 【模板】最近公共祖先(LCA)(dfs序+倍增)
  • QTP关于验证码的应用解决方法之一
  • [Swift]LeetCode217. 存在重复元素 | Contains Duplicate
  • 网管日志-06.07.18
  • unity 中 Tilemap的使用 笔记
  • 正版和盗版对开发的影响(请注意这个问题)
  • github上更新fork项目
  • 基于DBDataAccess类的具体数据访问类,这些代码大部分都可以自动生成。
  • 通俗易懂系列 | 设计模式(八):建造者模式
  • O血型的性格
  • entity
  • 01-python学习之路
  • 企业网站服务器负载均衡技术
  • 玩转报表排名之组内排名
  • 觉得MemberShip的灵活性太低了,不知各位有什么招弥补呢?
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • ES10 特性的完整指南
  • golang 发送GET和POST示例
  • HomeBrew常规使用教程
  • interface和setter,getter
  • LintCode 31. partitionArray 数组划分
  • Vue--数据传输
  • 编写符合Python风格的对象
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 工程优化暨babel升级小记
  • 力扣(LeetCode)22
  • 前端自动化解决方案
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 数组大概知多少
  • 项目管理碎碎念系列之一:干系人管理
  • 异常机制详解
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #{}和${}的区别是什么 -- java面试
  • #mysql 8.0 踩坑日记
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (vue)页面文件上传获取:action地址
  • (ZT)出版业改革:该死的死,该生的生
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)Eureka服务搭建,服务注册,服务发现
  • (分布式缓存)Redis分片集群
  • *2 echo、printf、mkdir命令的应用
  • ... 是什么 ?... 有什么用处?
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net中的Queue和Stack
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /boot 内存空间不够
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——