今天做一个全新的项目的时候用到分页,从以前以前做的项目中找出个分页存储过程,可以直接通过传入表名进行分页的,用到了ROW_NUMBER()函数,所以只适用于MSSQL2005以上,先记下来,以备不时之需。
-- =============================================
-- Author: 牛腩
-- Create date: 2009-07-22 12:41
-- Description: 分页,用到了ROW_NUMBER()
-- =============================================
create PROCEDURE [dbo].[proc_ShowPage]
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列,默认*
@strOrder varchar(255)='', -- 排序的字段名,必填
@strOrderType varchar(10)='ASC', -- 排序的方式,默认ASC
@PageSize int = 10, -- 页尺寸,默认10
@PageIndex int = 1, -- 页码,默认1
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000)
if @strWhere !=''
set @strWhere=' where '+@strWhere
set @strSQL=
'SELECT * FROM ('+
'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strGetFields+' '+
'FROM '+@tblName+' '+@strWhere+
') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)
exec (@strSQL)
下面是调用的示例,这里可以采用join连接
EXEC [proc_ShowPage]
@tblName = N'(project p inner join projectca ca on p.caid=ca.id)',
@strGetFields = N'p.title,ca.caname',
@strOrder = N'p.id',
@strOrderType = N'desc',
@PageSize = 12,
@PageIndex = 1,
@strWhere = N''
分享到:
相关推荐
例如,你可以创建一个名为`Pager_Rownumber`的存储过程,如下所示: ```sql CREATE PROCEDURE Pager_Rownumber @PageNumber INT, @PageSize INT, @OrderColumn NVARCHAR(128), @TableName NVARCHAR(128) AS ...
### 分页存储过程详解 #### 一、背景与概述 在数据库操作中,尤其是在处理大量数据时,分页查询是一项非常实用的技术。它能够有效地减少单次查询返回的数据量,从而减轻服务器压力并提高用户体验。SQL Server 2005...
1. 分页:可以使用 ROW_NUMBER() OVER 函数来实现数据库的分页功能。 2. 自动添加字段编号:可以使用 ROW_NUMBER() OVER 函数来自动添加字段编号。 3. 数据分析:可以使用 ROW_NUMBER() OVER 函数来对数据进行分析和...
`ROW_NUMBER()`在数据处理、分页查询、数据排序以及解决复杂的数据分析问题时起到关键作用。以下是对`ROW_NUMBER()`函数的详细解析。 1. **基本语法** `ROW_NUMBER()`函数的基本语法如下: ```sql SELECT ROW_...
以下是一个使用ROW_NUMBER()的分页存储过程示例: ```sql ALTER PROCEDURE [dbo].[sp_PagerWithROW_NUMBER] @tblName varchar(255), @strGetFields varchar(1000) = '*', @pkName nvarchar(50)='ID', @strOrder...
以下是一个简单的存储过程示例,展示了如何使用`ROW_NUMBER()`进行分页: ```sql CREATE PROCEDURE GetUsersPaged @StartIndex INT, -- 分页起始位置 @PageSize INT -- 每页记录数 AS BEGIN WITH CTE AS ( ...
简单又实用的 存储过程分页 真正的实现分页技术 可不是一锅端的分页 用存储过程实现的 好用到 2005 新特性ROW_NUMBER() 这个函数
下面将详细解释如何使用`ROW_NUMBER()`来实现分页以及需要注意的关键点。 首先,`ROW_NUMBER()`函数的基本语法如下: ```sql ROW_NUMBER() OVER (ORDER BY ordering_column [ASC|DESC]) ``` 在这个语法中,`...
总的来说,使用`ROW_NUMBER()`函数结合动态变量或存储过程,可以灵活地在SQL Server中实现高效、可扩展的分页查询,满足各种应用场景的需求。通过理解并掌握这种技术,可以更好地处理大数据量的查询,提升数据库性能...
在SQL_Page.txt中,可能包含了一个使用ROW_NUMBER()函数的分页存储过程。该过程可能会先创建一个带有行号的临时表或子查询,然后根据所需的页码和每页记录数来选择相应的行。这种方法的优点是性能较高,尤其是在处理...
本文将深入探讨如何创建和使用高效的分页存储过程,并针对SQL Server 2005及2010提供一个实用的例子。 首先,理解分页的基本概念。分页通常涉及到两个关键参数:当前页码(PageNumber)和每页记录数(PageSize)。...
本文将对比两种常用的分页方法:`row_number() over()` 和 `top`。 首先,让我们来看看 `top` 方法。`top` 是 SQL Server 中用于限制查询返回结果数量的关键字。例如,如果你想获取数据库表 `T_news` 的第一页,每...
总结,Oracle 存储过程中的分页实现有很多种方式,包括ROWNUM、ROW_NUMBER()、CTE、FETCH FIRST子句,以及JOIN和游标等。选择哪种方法取决于具体的需求,如数据库版本、性能需求、查询复杂性等因素。正确使用分页...
这里我们将深入探讨标题中提到的三种分页存储过程方法:拼接字符串、SQL Server 2005 的 `TOP (表达式)` 功能以及利用 `ROW_NUMBER()` 函数。 1. **拼接字符串**: 在早期的SQL版本中,由于缺乏内置的分页功能,...
分页存储过程可以极大地提升用户体验,因为它允许用户逐步加载数据,而不是一次性加载所有记录,从而节省网络资源和内存。本文将深入探讨Oracle数据库中的高效分页存储过程及其修改版。 首先,我们要理解什么是分页...
总结来说,MySQL的分页存储过程提供了一种高效、可复用的方式来处理分页查询,减少了直接使用OFFSET可能导致的性能问题。通过创建存储过程并在应用程序中调用,我们可以更好地控制分页逻辑,提高查询速度,提升用户...
这里我们将深入探讨如何在SQL Server 2005及更高版本中利用存储过程实现分页,以及如何结合`Row_Number()`函数进行高效分页。 首先,理解存储过程的优势。存储过程允许我们封装多条SQL语句,然后作为一个整体执行,...
Oracle数据库是一种广泛...总结来说,Oracle数据库的分页存储过程是提高查询性能的有效手段,通过ROWNUM或ROW_NUMBER()函数可以实现灵活的分页查询。理解并掌握这些技术,对于管理和优化大规模数据库的应用至关重要。