SqlServer2005海量数据存储过程分页(上)
/************************************************************
* 对数据进行了分处理使查询前半部分数据与查询后半部分数据性能相同
************************************************************/
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海量数据存储过程分页(上)相关推荐
- mysql通用分页_MySQL海量数据的通用存储过程分页代码
本节主要内容: MySQL海量数据的通用存储过程分页代码 本节为大家分享一例mysql 通用存储过程分页.海量数据分页的代码. 1,测试用的表结构: 复制代码 代码示例: CREATE TABLE I ...
- (转)几种常用存储过程分页方法
我们先给出几种主要的分页方法和核心语句,然后直接给出结论,有兴趣的读者可以看看后面的数据 几种常用存储过程分页方法 TopN方法 select Top(@PageSize) from TableNam ...
- MS SQLSERVER通用存储过程分页
最近在面试的时候,遇到个奇葩的秃顶老头面试官. 问:写过存储过程分页吗? 答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过. 问:那你这么多年工作中就没写过吗? 答:的确没写过, ...
- 非存储过程分页- 前台分页样式和控件
非存储过程分页- 前台分页样式和控件 一. DAL /// ///分页sql /// public DataTable GetUserAndError(int pageSize, int page ...
- silverlight + wcf(json格式) + sqlserver存储过程分页
silverlight并没有提供现成的分页控件,百度了一圈,也没有发现aspx中好用的类似AspNetPager成熟控件,网上现有的一些分页代码,很多也是基于1.0版本的,silverlight2.0 ...
- (转)关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现
原文:http://www.cnblogs.com/herbert/archive/2010/07/26/1785445.html 参考了许多的资料和不断地调试,总算把这个问题弄清楚了.实现了一个简单 ...
- 【华为云技术分享】#华为云·寻找黑马程序员#海量数据的分页怎么破?
一.背景 分页应该是极为常见的数据展现方式了,一般在数据集较大而无法在单个页面中呈现时会采用分页的方法. 各种前端UI组件在实现上也都会支持分页的功能,而数据交互呈现所相应的后端系统.数据库都对数据查 ...
- sql 存储过程分页
sql 存储过程分页 CREATE PROC myx_prPageRecordset @queryStr nvarchar(1000), @keyField nvarchar (200), @page ...
- 关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现
程序有3个控件 BindingNavigator: 就是DataGridView控件上面的那个,在工程里名字: bindngrDemo DataGridView: dgvDemo BindingSou ...
- [百万级]通用存储过程.分页存储过程
/* 名称:spAll_ReturnRows 输入: 输出: 调用: EXEC spAll_ReturnRows 'SELECT * FROM 表名', 页号, 返回记录数, '主键', ...
最新文章
- python在审计中的应用-基于python的自动化代码审计
- 如何把 DropDownList 某一个 Item 的 Text 改成粗体 ?
- vue学习(一)初步了解 vue实例
- JS之数组元素排序方法sort
- 2017年总结-致毕业半年的自己
- 【5】dockerfile制作镜像
- opencv-api adaptiveThreshold
- 调试阶段 获取微信小程序openid
- ACM题集以及各种总结大全
- Linux命令行下批量重命名文件名为数字索引编号(0~N.xxx)的方法
- ReentrantLock与Condition构造有界缓存队列与数据栈
- 关于SQL Server将一列的多行内容拼接成一行的问题讨论
- 后台传html样式展示无效_Dcat Admin v1.5.0 发布,对后端开发者高颜值后台系统构建工具...
- 动态链接库dll生成与调用 加密 电脑唯一识别 windows下多个cmd命令输出结果的同时获取 本地时间的处理
- 专注于操作系统25之软盘镜像
- 2021年安全生产模拟考试(全国特种作业操作证电工作业-电力电缆模拟考试题库二)安考星
- Geant4学习一:写一个简单程序
- Windows下Zookeeper启动错误Invalid arguments, exiting abnormally
- 2020届校园招聘360笔试题
- 牛客网刷题:Q3禁忌雷炎(一般)