`
zzzjav
  • 浏览: 2627 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

row number分頁存儲過程

阅读更多
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) 


分享到:
评论

相关推荐

    Row_number 分页存储过程

    例如,你可以创建一个名为`Pager_Rownumber`的存储过程,如下所示: ```sql CREATE PROCEDURE Pager_Rownumber @PageNumber INT, @PageSize INT, @OrderColumn NVARCHAR(128), @TableName NVARCHAR(128) AS ...

    高效分页存储过程 高效分页存储过程

    高效分页存储过程的实现对于优化数据库性能至关重要。本文将深入探讨如何创建和使用高效的分页存储过程,并针对SQL Server 2005及2010提供一个实用的例子。 首先,理解分页的基本概念。分页通常涉及到两个关键参数...

    MySql 分页存储过程以及代码调用

    本篇文章将深入探讨MySQL中的分页存储过程及其代码调用方法。 首先,理解分页的基本概念。在网页或应用程序中,我们通常会看到“上一页”、“下一页”这样的导航,这就是分页的表现形式。分页查询通过设置每页显示...

    分页存储过程,仅适用于Sql2005以上,使用 ROW_NUMBER()函数用于多表分页查询,可以分组查询

    ### 分页存储过程详解 #### 一、背景与概述 在数据库操作中,尤其是在处理大量数据时,分页查询是一项非常实用的技术。它能够有效地减少单次查询返回的数据量,从而减轻服务器压力并提高用户体验。SQL Server 2005...

    万能分页存储过程

    ### 万能分页存储过程知识点详解 #### 一、概述 在数据库操作中,分页查询是一项常用且重要的技术,特别是在数据量较大的场景下,能够显著提高用户体验和系统性能。本文将详细介绍一个名为“万能分页存储过程”的...

    C#调用分页存储过程实例

    本文将深入探讨如何使用C#语言调用SQL Server的分页存储过程,帮助开发者更高效地处理大量数据。 首先,理解分页查询的概念。分页查询是一种在大数据集上进行有效检索的方法,它允许用户按需加载一定数量的数据,而...

    Oracle 分页存储过程 终极版

    为了解决这个问题,高效的分页存储过程会结合`ROW_NUMBER()`窗口函数或者`RANK()`、`DENSE_RANK()`等,这些函数可以在查询过程中直接确定每行的顺序号,从而避免了全表扫描。此外,通过在`WHERE`子句中加入`ROWNUM`...

    通用分页存储过程

    ### 通用分页存储过程知识点解析 #### 一、存储过程概述 在数据库管理系统中,存储过程是一种预先编译并存储在数据库中的SQL程序。它能够接收参数,并根据这些参数执行复杂的逻辑操作,如数据查询、更新等。通过...

    SqlServer 分页存储过程以及代码调用

    二、SQL Server的分页存储过程 在SQL Server中,可以使用`OFFSET`和`FETCH NEXT`语句实现分页。下面是一个简单的分页存储过程示例: ```sql CREATE PROCEDURE [dbo].[usp_GetPagedData] @TableName NVARCHAR(128)...

    效率极高的万能分页存储过程

    ### 效率极高的万能分页存储过程 在数据库操作中,分页查询是非常常见的需求之一,尤其是在处理大量数据时。本篇文章将详细介绍一个高效且灵活的分页存储过程,该过程能够满足多种场景下的分页需求,并具有较高的...

    分页存储过程整理(三种方法)

    这里我们将深入探讨标题中提到的三种分页存储过程方法:拼接字符串、SQL Server 2005 的 `TOP (表达式)` 功能以及利用 `ROW_NUMBER()` 函数。 1. **拼接字符串**: 在早期的SQL版本中,由于缺乏内置的分页功能,...

    3个高效率sql分页存储过程

    1. **基于ROW_NUMBER()函数的分页存储过程** ROW_NUMBER()是SQL Server中的一个窗口函数,它为每一行提供一个唯一的行号。我们可以利用这个功能来实现分页。以下是一个基础的存储过程示例: ```sql CREATE ...

    Oracle 高效分页存储过程(修改)

    分页存储过程可以极大地提升用户体验,因为它允许用户逐步加载数据,而不是一次性加载所有记录,从而节省网络资源和内存。本文将深入探讨Oracle数据库中的高效分页存储过程及其修改版。 首先,我们要理解什么是分页...

    sql分页存储过程(无论那个表,表中有多少字段都可以用这一个存储过程)

    根据提供的文件信息,本文将详细解释一种通用的SQL分页存储过程实现方法,该方法能够适应不同的表结构、字段数量,并支持自定义排序字段与筛选条件。 ### SQL 分页存储过程解析 #### 标题说明 标题“sql分页存储...

    .net分页技术用到 2005新特性ROW_NUMBER()绝对经典实用

    简单又实用的 存储过程分页 真正的实现分页技术 可不是一锅端的分页 用存储过程实现的 好用到 2005 新特性ROW_NUMBER() 这个函数

    常见的 分页存储过程

    在数据库管理中,分页存储过程是用于处理大量数据查询的一种高效方法,它允许用户以较小的数据块(页面)来浏览结果集,而不是一次性加载所有数据。这在处理大规模数据时尤其有用,因为它减少了内存占用,提高了用户...

    sql分页存储过程

    "sql分页存储过程"是指利用SQL语言编写的一个存储过程,这个过程专门用于执行分页查询。本文将详细讲解SQL分页存储过程的概念、原理以及如何实现。 首先,理解分页查询的基本概念。分页查询允许我们从数据库中按...

    分页存储过程sql脚本

    分页存储过程是数据库系统中预编译的SQL代码集合,用于高效地检索特定数据集的一部分,通常是一个页面的数据量。这样的存储过程可以显著减少网络传输的数据量,改善前端应用的响应时间,并减轻服务器的负载。下面...

    sql server 2000 分页存储过程,DB2分页存储过程,db2自动生成流水号存储过程

    首先,让我们看看SQL Server 2000的分页存储过程。在SQL Server 2000中,由于没有内置的OFFSET和FETCH NEXT功能,我们通常会使用`TOP`和`ORDER BY`结合`ROW_NUMBER()`函数来实现分页。以下是一个简单的例子: ```...

Global site tag (gtag.js) - Google Analytics