/*
经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒,测试语法如下:
exec GetRecordFromPage news,newsid,10,100000
news 为 表名, newsid 为关键字段, 使用时请先对 newsid 建立索引。
*/
/*
函数名称: GetRecordFromPage
函数功能: 获取指定页的数据
参数说明: @tblName 包含数据的表名
@fldName 关键字段名
@PageSize 每页记录数
@PageIndex 要获取的页码
@OrderType 排序类型, 0 - 升序, 1 - 降序
@strWhere 查询条件 (注意: 不要加 where)
作 者: 铁拳
邮 箱: sunjianhua_kki@sina.com
创建时间: 2004-07-04
修改时间: 2004-07-04
*/
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(2000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(1000) -- 临时变量
declare @strOrder varchar(500) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
exec (@strSQL)
GO
分享到:
相关推荐
这篇讨论涉及两个分页存储过程的效率比较,其中一个示例存储过程名为`p_page`。`p_page`存储过程的设计允许用户灵活地指定查询参数,包括表名、主键、查询字段、每页记录数、当前页数、过滤条件、分组依据以及排序...
SQL Server 分页存储过程是一种在数据库中实现高效数据分页查询的方法。在大型数据集的展示中,分页是必不可少的,因为它允许用户逐步浏览数据,而不是一次性加载所有记录,从而提高用户体验并减少服务器负载。以下...
本文将深入分析一个高效的分页存储过程,并探讨其在实际场景中的应用。 #### 存储过程概览 该存储过程名为`GetPageDataOut`,主要用于实现高效的数据分页功能。通过传入表名、主键、当前页码、每页显示条数、查询...
### 高效分页存储过程实现详解 #### 标题:高效分页存储过程过程 #### 描述: 本文档详细介绍了如何使用一个自定义的存储过程`search_sp`来实现数据库中的分页查询功能。该存储过程允许用户指定表名、需要返回的...
在"分页存储过程效率对比.doc"文档中,可能详细分析了每种方法的执行计划、资源消耗、响应时间等指标,通过实验数据来展示不同方法在实际应用中的性能差异。对比这些数据可以帮助我们理解在特定数据库结构和工作负载...
整个实验通过输入和输出来交互,模拟了实际的内存管理过程,帮助学生深入理解分页存储管理的工作原理。 通过这个实验,学生不仅学习了分页存储管理的基础概念,还掌握了如何用编程实现这些概念,包括页表的构建、位...
本文将详细介绍如何利用存储过程来实现高效的数据分页,特别关注SQL Server 2000与SQL Server 2005下的两种分页存储过程:`Basic_Pagination2000`和`Basic_Pagination2005`。 #### `Basic_Pagination2000`:适用于...
本文将详细介绍如何在C# WinForm应用中实现一个分页功能,并通过存储过程进行数据检索,同时提供相关的代码示例,帮助你快速上手。 一、分页控件的基本概念 分页控件允许用户以较小的数据集浏览大型数据集合,避免...
根据提供的信息,我们可以详细解析与“SQL 2000 分页存储过程”相关的知识点。 ### SQL Server 2000 分页存储过程 #### 一、存储过程概述 存储过程是预先编译并存储在数据库中的SQL命令集合。它们可以接受参数,...
下面将详细介绍这两种版本中的分页存储过程实现方式。 1. SQL Server 2000 分页存储过程: 在SQL Server 2000中,由于没有`OFFSET`和`FETCH NEXT`这样的分页关键字,我们需要使用`ROW_NUMBER()`函数结合`CTE`(公共...
例如,你可以创建一个存储过程,接收两个参数:当前页码和每页显示的记录数,然后返回相应页的数据。这样,客户端只需传递这两个参数,而无需获取整个数据集,从而提高了性能。 此外,这套代码可能还包括了错误处理...
- **主要内容**:本文档提供了一个SQL Server中的高效分页存储过程实现方式,旨在通过优化查询逻辑来提升分页功能的执行效率。 #### 描述:存储过程与页面调用示例 - **存储过程定义**: - `CREATE PROCEDURE ...
操作系统实验报告中的主题是“基本分页存储管理”,这是一个核心的操作系统概念,旨在解决内存管理和虚拟地址到物理地址转换的问题。在本次实验中,学生通过编写源代码模拟了一个基本的分页存储管理系统。 分页存储...
以下是一个基本的分页存储过程的实现思路: 1. **输入参数**:通常,我们需要两个输入参数,一个是当前页码(`@CurrentPage`),另一个是每页显示的记录数(`@PageSize`)。有时还需要一个排序字段(`@SortColumn`...
当进程需要访问的数据不在内存中时,会触发缺页异常,此时操作系统会根据页表找到相应的磁盘页面并将其加载到一个空闲帧中,这一过程称为页面调度或页面替换。 页表是请求分页式存储管理的关键数据结构,它记录了每...
通用分页存储过程`UP_GetRecordByPage`就是为了实现这一目标而设计的。这个存储过程允许开发人员根据需要获取数据库表中的指定页数据,而不必为每个表或每个查询编写特定的分页代码。 存储过程是预编译的SQL语句...
在IT领域的数据库管理与操作中,分页是一个常见的需求,特别是在数据量庞大的情况下,通过分页可以有效地提高数据检索的效率和用户体验。本篇将详细解析如何利用SQL Server中的存储过程实现分页功能,深入理解其工作...