USE [GoodsSystem]
GO
/****** 对象: StoredProcedure [dbo].[proc_table_paging] 脚本日期: 08/30/2010 16:03:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
使用 ROW_NUMBER() OVER 分页的例子
WITH tb_temp AS
(SELECT *,ROW_NUMBER() OVER (ORDER BY productid asc) as RowNumber from goods )
SELECT * FROM tb_temp WHERE RowNumber between 50 and 60;
*/
--exec [dbo].[proc_table_paging] 'goods','gid','','price',10,10000,9,'',1
--drop proc [dbo].[proc_table_paging]
-----------------------------------------------
-- 使用 ROW_NUMBER() OVER 分页的存储过程
-----------------------------------------------
CREATE PROCEDURE [dbo].[proc_table_paging]
@tblName varchar(255), -- 表名
@keyFields varchar(255), -- 主键列名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255) = @keyFields, -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非0值则降序
@strWhere varchar(1500) = '', -- 查询条件(注意: 不要加where)
@doCount bit = 0 -- 统计并返回记录总数, 非0值则返回
AS
declare @strSQL varchar(5000) -- 主语句
declare @strOrder varchar(400) -- 排序类型
declare @begin varchar(20) -- 起始行数
declare @end varchar(20) -- 结束行数
-- 默认返回所有列
if rtrim(ltrim(@strGetFields))=''
set @strGetFields='*'
-- 默认排序字段为主键列
if rtrim(ltrim(@fldName))=''
set @fldName=@keyFields
-- 默认每页大小为10行记录
if @PageSize<1
set @PageSize=10
-- 默认查询第一页
if @PageIndex<1
set @PageIndex=1
-- 默认没有where子句
if rtrim(ltrim(@strWhere))=''
set @strWhere=''
-- 默认为0时升序排列,否则降序排列
if @OrderType=0
set @strOrder = 'asc'
else
set @strOrder = 'desc'
-- 默认为0时不进行记录数的统计,否则统计并返回共有几条记录符合查询条件
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
else
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
exec (@strSQL)
end
-- 计算起始行数和终止行数
set @begin = cast( @PageSize*(@PageIndex-1)+1 as varchar(20) )
set @end = cast( @PageSize*@PageIndex as varchar(20) )
-- 构造临时表
if @strWhere!=''
begin
set @strSQL = 'WITH tb_temp AS (SELECT '+@strGetFields+' ,ROW_NUMBER() OVER (ORDER BY '+@fldName+' '+@strOrder+' )as RowNumber from '+@tblName+' where '+@strWhere+') '
end
else
begin
set @strSQL = 'WITH tb_temp AS (SELECT '+@strGetFields+' ,ROW_NUMBER() OVER (ORDER BY '+@fldName+' '+@strOrder+' )as RowNumber from '+@tblName+') '
end
-- 从临时表中查询出结果
set @strSQL = @strSQL + ' SELECT '+@strGetFields+' FROM tb_temp WHERE RowNumber between '+@begin+' and '+@end
print @strSQL
exec (@strSQL)
分享到:
相关推荐
例如,你可以创建一个名为`Pager_Rownumber`的存储过程,如下所示: ```sql CREATE PROCEDURE Pager_Rownumber @PageNumber INT, @PageSize INT, @OrderColumn NVARCHAR(128), @TableName NVARCHAR(128) AS ...
高效分页存储过程的实现对于优化数据库性能至关重要。本文将深入探讨如何创建和使用高效的分页存储过程,并针对SQL Server 2005及2010提供一个实用的例子。 首先,理解分页的基本概念。分页通常涉及到两个关键参数...
本篇文章将深入探讨MySQL中的分页存储过程及其代码调用方法。 首先,理解分页的基本概念。在网页或应用程序中,我们通常会看到“上一页”、“下一页”这样的导航,这就是分页的表现形式。分页查询通过设置每页显示...
### 分页存储过程详解 #### 一、背景与概述 在数据库操作中,尤其是在处理大量数据时,分页查询是一项非常实用的技术。它能够有效地减少单次查询返回的数据量,从而减轻服务器压力并提高用户体验。SQL Server 2005...
### 万能分页存储过程知识点详解 #### 一、概述 在数据库操作中,分页查询是一项常用且重要的技术,特别是在数据量较大的场景下,能够显著提高用户体验和系统性能。本文将详细介绍一个名为“万能分页存储过程”的...
本文将深入探讨如何使用C#语言调用SQL Server的分页存储过程,帮助开发者更高效地处理大量数据。 首先,理解分页查询的概念。分页查询是一种在大数据集上进行有效检索的方法,它允许用户按需加载一定数量的数据,而...
为了解决这个问题,高效的分页存储过程会结合`ROW_NUMBER()`窗口函数或者`RANK()`、`DENSE_RANK()`等,这些函数可以在查询过程中直接确定每行的顺序号,从而避免了全表扫描。此外,通过在`WHERE`子句中加入`ROWNUM`...
### 通用分页存储过程知识点解析 #### 一、存储过程概述 在数据库管理系统中,存储过程是一种预先编译并存储在数据库中的SQL程序。它能够接收参数,并根据这些参数执行复杂的逻辑操作,如数据查询、更新等。通过...
二、SQL Server的分页存储过程 在SQL Server中,可以使用`OFFSET`和`FETCH NEXT`语句实现分页。下面是一个简单的分页存储过程示例: ```sql CREATE PROCEDURE [dbo].[usp_GetPagedData] @TableName NVARCHAR(128)...
### 效率极高的万能分页存储过程 在数据库操作中,分页查询是非常常见的需求之一,尤其是在处理大量数据时。本篇文章将详细介绍一个高效且灵活的分页存储过程,该过程能够满足多种场景下的分页需求,并具有较高的...
这里我们将深入探讨标题中提到的三种分页存储过程方法:拼接字符串、SQL Server 2005 的 `TOP (表达式)` 功能以及利用 `ROW_NUMBER()` 函数。 1. **拼接字符串**: 在早期的SQL版本中,由于缺乏内置的分页功能,...
1. **基于ROW_NUMBER()函数的分页存储过程** ROW_NUMBER()是SQL Server中的一个窗口函数,它为每一行提供一个唯一的行号。我们可以利用这个功能来实现分页。以下是一个基础的存储过程示例: ```sql CREATE ...
分页存储过程可以极大地提升用户体验,因为它允许用户逐步加载数据,而不是一次性加载所有记录,从而节省网络资源和内存。本文将深入探讨Oracle数据库中的高效分页存储过程及其修改版。 首先,我们要理解什么是分页...
根据提供的文件信息,本文将详细解释一种通用的SQL分页存储过程实现方法,该方法能够适应不同的表结构、字段数量,并支持自定义排序字段与筛选条件。 ### SQL 分页存储过程解析 #### 标题说明 标题“sql分页存储...
简单又实用的 存储过程分页 真正的实现分页技术 可不是一锅端的分页 用存储过程实现的 好用到 2005 新特性ROW_NUMBER() 这个函数
在数据库管理中,分页存储过程是用于处理大量数据查询的一种高效方法,它允许用户以较小的数据块(页面)来浏览结果集,而不是一次性加载所有数据。这在处理大规模数据时尤其有用,因为它减少了内存占用,提高了用户...
"sql分页存储过程"是指利用SQL语言编写的一个存储过程,这个过程专门用于执行分页查询。本文将详细讲解SQL分页存储过程的概念、原理以及如何实现。 首先,理解分页查询的基本概念。分页查询允许我们从数据库中按...
分页存储过程是数据库系统中预编译的SQL代码集合,用于高效地检索特定数据集的一部分,通常是一个页面的数据量。这样的存储过程可以显著减少网络传输的数据量,改善前端应用的响应时间,并减轻服务器的负载。下面...
首先,让我们看看SQL Server 2000的分页存储过程。在SQL Server 2000中,由于没有内置的OFFSET和FETCH NEXT功能,我们通常会使用`TOP`和`ORDER BY`结合`ROW_NUMBER()`函数来实现分页。以下是一个简单的例子: ```...