转
http://www.cnblogs.com/caojinqin/archive/2010/03/09/1681544.html
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
/*
功能描述: 通用分页显示查询
如果有自增标识字段,在@strGetFields中不要加入此字段信息,
如果非要加入的话,要 (fldName + 0) AS fldName 这样处理;
输入参数:
@tblName: 表名
@strGetFields: 需要返回的列 '*':返回所以列信息
@PageSize: 页尺寸
@PageIndex: 页码
@doCount: 返回记录总数, 非 0 值则返回
@strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY)
格式: Field1 DESC, Field2 ASC
@strWhere: 查询条件,(注意: 不要加 WHERE)
输出参数: @RecordCount: 记录总数
作 者: Nestcn
创建时间: 2010-03-09
更改纪录:
*/
ALTER PROCEDURE [dbo].[MyPagination]
(
@tblName varchar(255),
@strGetFields varchar(1000) = '*',
@PageSize int = 10,
@PageIndex int = 1,
@doCount bit = 0,
@strOrderBy varchar(500) = '',
@strWhere varchar(1500) = '',
@RecordCount int output
)
AS
-- 主语句
DECLARE @strSQL varchar(5000) SET @strSQL = ''
-- 排序变量
DECLARE @strOrder varchar(400) SET @strOrder = ''
SET @RecordCount = 0
--如果@doCount传递过来的不是0,就执行总数统计
IF (@doCount != 0)
BEGIN
DECLARE @sWhere varchar(2000)
SET @sWhere = ''
IF (@strWhere != '')
SET @sWhere = ' WHERE ' + @strWhere
SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(''[dbo].[tmpTable]'') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) '
SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') '
SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere
EXEC (@strSQL)
SELECT @RecordCount=Total FROM tmpTable
--删除总数统计临时表
EXEC ('DROP TABLE tmpTable')
END
PRINT @RecordCount
--排序字段信息
IF (@strOrderBy != '')
SET @strOrder = ' ORDER BY ' + @strOrderBy
--如果是第一页就执行以上代码,这样会加快执行速度
IF (@PageIndex = 1)
BEGIN
IF (@strWhere != '')
SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM [' + @tblName + '] WHERE ' + @strWhere + @strOrder
ELSE
SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM ['+ @tblName + '] '+ @strOrder
END
ELSE
BEGIN
--为搜索表建立自动编号 保存到临时表中
SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']'
IF (@strWhere != '')
SET @strSQL = @strSQL + ' WHERE ' + @strWhere + @strOrder
ELSE
SET @strSQL = @strSQL + @strOrder
--以下代码赋予了@strSQL以真正执行的SQL代码
SET @strSQL = @strSQL + ' SELECT ' + @strGetFields + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable'
END
PRINT @strSQL
--执行分页查询
EXEC (@strSQL)
相关推荐
本文将深入探讨如何设计和实现一个用于处理千万级数据分页的存储过程,并基于提供的"存储过程分页.sql"文件进行解析。 首先,我们需要理解分页的基本概念。分页是将大量数据分成小块(页)进行显示,以避免一次性...
总的来说,利用SQL Server的存储过程进行千万级数据分页查询,结合合理的索引策略和优化技巧,能够有效提升查询性能,降低系统负载,为用户提供流畅的浏览体验。请参考“分页.txt”和“使用方法.txt”文件,了解更多...
在IT领域,尤其是在数据库管理与优化方面,千万级数据分页技术是处理大数据量时不可或缺的一项技能。本文将深入解析“千万级分页存储过程实现对表的数据分页速度非常快”的核心知识点,包括其原理、实现方法以及SQL ...
本文详细介绍了如何设计一个能够支持千万数量级数据处理的分页存储过程,包括了多表查询的支持、任意排序功能的实现以及高效的数据获取策略等关键知识点。通过对这些技术点的理解和掌握,可以有效地提高数据库应用的...
本节将从以下几个方面详细阐述实现千万级数据分页的关键技术点: 1. **SQL查询优化**:通过优化SQL语句来提高查询效率。 2. **动态生成SQL**:根据不同的参数动态生成SQL语句,实现灵活的分页功能。 3. **存储过程...
### 实现千万级数据分页的存储过程 #### 背景与意义 在数据库管理中,处理大量数据时,如何高效地进行分页显示是一个常见的挑战。传统的SQL查询方式在面对海量数据时可能会出现性能瓶颈,导致响应时间过长。因此,...
经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒; 再生产环境中非常实用,帮助你解决线上数据库卡顿问题。
本文将基于给定的“oracle分页存储过程千万级”文件信息,深入解析其核心概念、设计思路及实现细节。 ### 核心概念解析 #### 1. 存储过程(Stored Procedure) 存储过程是一种预编译的SQL代码块,存储在数据库...
总结来说,这个千万级分页存储过程通过精心设计的逻辑,实现了高效的大规模数据分页查询,适用于需要处理大量数据的数据库系统。它不仅考虑了排序、过滤和分组,还优化了对字符类型数据的处理,确保在处理大数据量时...
总的来说,`[dbo].[SP_Pagination]`是一个针对大数量级数据的分页存储过程,它通过灵活的参数设置和优化的查询逻辑,提高了分页查询的效率,降低了数据库的负载,是处理大数据量场景下的一个实用工具。在实际应用中...
### MySQL 百万级分页优化(Mysql千万级快速分页) #### 背景与挑战 在处理大规模数据集时,例如拥有数百万乃至数千万条记录的数据库表,传统的分页查询方法可能会遇到性能瓶颈。特别是使用`LIMIT`进行分页时,随着...
在数据库管理中,面对千万级别的数据分页查询是一项挑战,因为传统的`OFFSET-FETCH`或`LIMIT`方法在大数据量时效率较低。本文件提供的两个存储过程,`[dbo].[GetRecordFromPage]`和`[dbo].[usp_GetRecordFromPage]`...
/* *************************************************************** ** 中国无忧商务网千万数量级分页存储过程 ** *************************************************************** 参数说明: 1.Tables...
首先,存储过程的标题直接说明了其功能:“ASP 千万级数据分页的存储过程”。标题简洁明了地告诉了读者该存储过程的应用场景,即在ASP(Active Server Pages,即活动服务器页面)环境下处理大量数据时的数据分页操作...
** 千万数量级分页存储过程 ** *************************************************************** 参数说明: 1.Tables :表名称,视图 2.PrimaryKey :主关键字 3.Sort :排序语句,不带Order By 比如:NewsID Desc,...
### 实现千万级数据的SQL分页代码 #### 背景与意义 在处理大量数据时,如何高效地进行分页查询是非常重要的。对于拥有数百万甚至上千万条记录的数据库表,如果采用传统的分页方法(如简单地通过LIMIT进行偏移),...
描述中提到的资源包括异步海量数据分页存储过程,这表明在后端,开发者使用了异步技术来处理大量数据的分页请求,以避免阻塞主线程,提高系统的响应速度。同时,源码可以直接应用于项目中,这对于开发者来说是一个...
【MySQL千万级大表深度分页慢的原因及优化方法】 在MySQL中,处理千万级大表的深度分页查询时,通常会遇到性能问题。这是因为MySQL的查询优化器在面对大量数据的分页请求时,可能选择全表扫描而不是利用索引来提高...