/************************************************************

* 对数据进行了分处理使查询前半部分数据与查询后半部分数据性能相同

************************************************************/

ALTER PROCEDURE Proc_QB_Pager(

@tblName       NVARCHAR(200), ----要显示的表或多个表的连接

@fldName       NVARCHAR(500) = '*', ----要显示的字段列表

@pageSize      INT = 10, ----每页显示的记录个数

@page          INT = 1, ----要显示那一页的记录

@fldSort       NVARCHAR(200) = NULL, ----排序字段列表或条件

@Sort          BIT = 0, ----排序方法,为升序,为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')

@strCondition  NVARCHAR(1000) = NULL, ----查询条件,不需where

@ID            NVARCHAR(150), ----主表的主键

@Dist          BIT = 0, ----是否添加查询字段的DISTINCT 默认不添加/1添加

@pageCount     INT = 1 OUTPUT, ----查询结果分页后的总页数

@Counts        INT = 1 OUTPUT ----查询到的记录数

)

AS

SET NOCOUNT ON

DECLARE @sqlTmp NVARCHAR(1000) ----存放动态生成的SQL语句

DECLARE @strTmp NVARCHAR(1000) ----存放取得查询结果总数的查询语句

DECLARE @strID NVARCHAR(1000) ----存放取得查询开头或结尾ID的查询语句

DECLARE @strSortType NVARCHAR(10) ----数据排序规则A

DECLARE @strFSortType NVARCHAR(10) ----数据排序规则B

DECLARE @SqlSelect NVARCHAR(50) ----对含有DISTINCT的查询进行SQL构造

DECLARE @SqlCounts NVARCHAR(50) ----对含有DISTINCT的总数查询进行SQL构造

DECLARE @timediff DATETIME --耗时测试时间差

SELECT @timediff = GETDATE()

IF @Dist = 0

BEGIN

SET @SqlSelect = 'select '

SET @SqlCounts = 'Count(*)'

END

ELSE

BEGIN

SET @SqlSelect = 'select distinct '

SET @SqlCounts = 'Count(DISTINCT ' + @ID + ')'

END

IF @Sort = 0

BEGIN

SET @strFSortType = ' ASC '

SET @strSortType = ' DESC '

END

ELSE

BEGIN

SET @strFSortType = ' DESC '

SET @strSortType = ' ASC '

END

--------生成查询语句--------

--此处@strTmp为取得查询结果数量的语句

IF @strCondition IS NULL

OR @strCondition = '' --没有设置显示条件

BEGIN

SET @sqlTmp = @fldName + ' From ' + @tblName

SET @strTmp = @SqlSelect + ' @Counts=' + @SqlCounts + ' FROM ' + @tblName

SET @strID = ' From ' + @tblName

END

ELSE

BEGIN

SET @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition

SET @strTmp = @SqlSelect + ' @Counts=' + @SqlCounts + ' FROM ' + @tblName

+ ' where (1>0) ' + @strCondition

SET @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition

END

----取得查询结果总数量-----

EXEC sp_executesql @strTmp,

N'@Counts int out ',

@Counts OUT

DECLARE @tmpCounts INT

IF @Counts = 0

SET @tmpCounts = 1

ELSE

SET @tmpCounts = @Counts

--取得分页总数

SET @pageCount = (@tmpCounts + @pageSize -1) / @pageSize

/**//**当前页大于总页数取最后一页**/

IF @page > @pageCount

SET @page = @pageCount

--/*-----数据分页分处理-------*/

DECLARE @pageIndex INT --总数/页大小

DECLARE @lastcount INT --总数%页大小

SET @pageIndex = @tmpCounts / @pageSize

SET @lastcount = @tmpCounts%@pageSize

IF @lastcount > 0

SET @pageIndex = @pageIndex + 1

ELSE

SET @lastcount = @pagesize

--//***显示分页

IF @strCondition IS NULL

OR @strCondition = '' --没有设置显示条件

BEGIN

IF @pageIndex < 2

OR @page <= @pageIndex / 2 + @pageIndex % 2 --前半部分数据处理

BEGIN

IF @page = 1

SET @strTmp = @SqlSelect + ' top ' + CAST(@pageSize AS VARCHAR(4))

+ ' ' + @fldName + ' from ' + @tblName

+ ' order by ' + @fldSort + ' ' + @strFSortType

ELSE

BEGIN

IF @Sort = 1

BEGIN

SET @strTmp = @SqlSelect + ' top ' + CAST(@pageSize AS VARCHAR(4))

+ ' ' + @fldName + ' from ' + @tblName

+ ' where ' + @ID + ' <(select min(' + @ID + ') from (' +

@SqlSelect + ' top ' + CAST(@pageSize * (@page -1) AS VARCHAR(20))

SqlServer2005海量数据存储过程分页(上)相关推荐

  1. mysql通用分页_MySQL海量数据的通用存储过程分页代码

    本节主要内容: MySQL海量数据的通用存储过程分页代码 本节为大家分享一例mysql 通用存储过程分页.海量数据分页的代码. 1,测试用的表结构: 复制代码 代码示例: CREATE TABLE I ...

  2. (转)几种常用存储过程分页方法

    我们先给出几种主要的分页方法和核心语句,然后直接给出结论,有兴趣的读者可以看看后面的数据 几种常用存储过程分页方法 TopN方法 select Top(@PageSize) from TableNam ...

  3. MS SQLSERVER通用存储过程分页

    最近在面试的时候,遇到个奇葩的秃顶老头面试官. 问:写过存储过程分页吗? 答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过. 问:那你这么多年工作中就没写过吗? 答:的确没写过, ...

  4. 非存储过程分页- 前台分页样式和控件

    非存储过程分页- 前台分页样式和控件 一.   DAL /// ///分页sql /// public DataTable GetUserAndError(int pageSize, int page ...

  5. silverlight + wcf(json格式) + sqlserver存储过程分页

    silverlight并没有提供现成的分页控件,百度了一圈,也没有发现aspx中好用的类似AspNetPager成熟控件,网上现有的一些分页代码,很多也是基于1.0版本的,silverlight2.0 ...

  6. (转)关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现

    原文:http://www.cnblogs.com/herbert/archive/2010/07/26/1785445.html 参考了许多的资料和不断地调试,总算把这个问题弄清楚了.实现了一个简单 ...

  7. 【华为云技术分享】#华为云·寻找黑马程序员#海量数据的分页怎么破?

    一.背景 分页应该是极为常见的数据展现方式了,一般在数据集较大而无法在单个页面中呈现时会采用分页的方法. 各种前端UI组件在实现上也都会支持分页的功能,而数据交互呈现所相应的后端系统.数据库都对数据查 ...

  8. sql 存储过程分页

    sql 存储过程分页 CREATE PROC myx_prPageRecordset @queryStr nvarchar(1000), @keyField nvarchar (200), @page ...

  9. 关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现

    程序有3个控件 BindingNavigator: 就是DataGridView控件上面的那个,在工程里名字: bindngrDemo DataGridView: dgvDemo BindingSou ...

  10. [百万级]通用存储过程.分页存储过程

    /*  名称:spAll_ReturnRows  输入:  输出:  调用:   EXEC spAll_ReturnRows 'SELECT  * FROM 表名', 页号, 返回记录数, '主键', ...

最新文章

  1. python在审计中的应用-基于python的自动化代码审计
  2. 如何把 DropDownList 某一个 Item 的 Text 改成粗体 ?
  3. vue学习(一)初步了解 vue实例
  4. JS之数组元素排序方法sort
  5. 2017年总结-致毕业半年的自己
  6. 【5】dockerfile制作镜像
  7. opencv-api adaptiveThreshold
  8. 调试阶段 获取微信小程序openid
  9. ACM题集以及各种总结大全
  10. Linux命令行下批量重命名文件名为数字索引编号(0~N.xxx)的方法
  11. ReentrantLock与Condition构造有界缓存队列与数据栈
  12. 关于SQL Server将一列的多行内容拼接成一行的问题讨论
  13. 后台传html样式展示无效_Dcat Admin v1.5.0 发布,对后端开发者高颜值后台系统构建工具...
  14. 动态链接库dll生成与调用 加密 电脑唯一识别 windows下多个cmd命令输出结果的同时获取 本地时间的处理
  15. 专注于操作系统25之软盘镜像
  16. 2021年安全生产模拟考试(全国特种作业操作证电工作业-电力电缆模拟考试题库二)安考星
  17. Geant4学习一:写一个简单程序
  18. Windows下Zookeeper启动错误Invalid arguments, exiting abnormally
  19. 2020届校园招聘360笔试题
  20. 牛客网刷题:Q3禁忌雷炎(一般)

热门文章

  1. 小贝_redis高级应用-公布与订阅
  2. Activity详解 Intent显式跳转和隐式跳转, 及多个Activity之间传值 总结
  3. UML 2中结构图的介绍
  4. javascript 自建立对象
  5. linux下如何在线添加和移除scsi磁盘?
  6. 12.企业应用架构模式 --- 对象-关系结构模式
  7. 14.PHP vld 扩展
  8. 104. 字符串函数
  9. 4. PHP之活动记录
  10. oracle CHARINDEX 函数用法