SQL SERVER 通用分页存储过程,两种用法任你选

写在前面

从SQLSERVER 2005开始,提供了Row_Number()函数,利用函数生成的Index来处理分页,按照正常的逻辑思维都是传pageIndex和pageSize来完成分页,昨天前端和我沟通,他们使用jQuery.DataTable.js插件,而且经过了公司底层的封装,pageIndex需要变动一下,变成pageIndex*pageSize来传。 也就是说按每页显示30条算,第一次传0,第二次传30这样来计算,我也是醉了。

1、传pageIndex和pageSize

CREATE PROC [dbo].[Common_PageList]
(
@tab nvarchar(max),---表名
@strFld nvarchar(max), --字段字符串
@strWhere varchar(max), --where条件
@PageIndex int, --页码
@PageSize int, --每页容纳的记录数
@Sort VARCHAR(255), --排序字段及规则,不用加order by
@IsGetCount bit  --是否得到记录总数,1为得到记录总数,0为不得到记录总数,返回记录集
)
AS
declare @strSql nvarchar(max)
set nocount on;
if(@IsGetCount = 1)
begin
 set @strSql=‘SELECT COUNT(0) FROM ‘ + @tab + ‘ WHERE ‘ + @strWhere
end
else
begin
  set @strSql=‘ SELECT * FROM (SELECT ROW_NUMBER()
  OVER(ORDER BY ‘ + @Sort + ‘) AS rownum, ‘ + @strFld + ‘ FROM ‘ + @tab + ‘ where ‘ + @strWhere + ‘) AS Dwhere
  WHERE rownum BETWEEN ‘ + CAST(((@PageIndex-1)*@PageSize + 1) as nvarchar(20)) + ‘ and ‘ + cast((@PageIndex*@PageSize) as nvarchar(20))
end

exec (@strSql)

set nocount off;

2、传pageIndex*pageSize和pageSize

CREATE PROC [dbo].[Common_PageList2]
(
@tab nvarchar(max),---表名
@strFld nvarchar(max), --字段字符串
@strWhere varchar(max), --where条件
@StartIndex int, -- 开始行数
@PageSize int, --每页容纳的记录数
@Sort VARCHAR(255), --排序字段及规则,不用加order by
@IsGetCount bit  --是否得到记录总数,1为得到记录总数,0为不得到记录总数,返回记录集
)
AS
DECLARE @strSql NVARCHAR(max)
SET NOCOUNT ON;
IF(@IsGetCount = 1)
BEGIN
 SET @strSql=‘SELECT COUNT(0) FROM ‘ + @tab + ‘ WHERE ‘ + @strWhere
END
ELSE
BEGIN
  DECLARE @ENDINDEX INT
  IF(@StartIndex>0)
    BEGIN
      SET @ENDINDEX=@StartIndex+@PageSize
      SET @StartIndex=@StartIndex+1
    END
  ELSE
    SET @ENDINDEX=@StartIndex+@PageSize

    SET @strSql=‘ SELECT * FROM (SELECT ROW_NUMBER()
  OVER(ORDER BY ‘ + @Sort + ‘) AS rownum, ‘ + @strFld + ‘ FROM ‘ + @tab + ‘ where ‘ + @strWhere + ‘) AS Dwhere
  WHERE rownum BETWEEN ‘ + CAST(@StartIndex AS VARCHAR(30)) + ‘ and ‘ + CAST(@ENDINDEX AS VARCHAR(30))
end

exec (@strSql)

SET NOCOUNT OFF;
时间: 2024-07-28 22:09:02

SQL SERVER 通用分页存储过程,两种用法任你选的相关文章

SQL SERVER 通用分页存储过程

SQL SERVER 通用分页存储过程 从SQLSERVER 2005开始,提供了Row_Number()函数,利用函数生成的Index来处理分页,按照正常的逻辑思维都是传pageIndex和pageSize来完成分页,昨天前端和我沟通,他们使用jQuery.DataTable.js插件,而且经过了公司底层的封装,pageIndex需要变动一下,变成pageIndex*pageSize来传. 也就是说按每页显示30条算,第一次传0,第二次传30这样来计算,我也是醉了. 1.传pageIndex和

Sql Server通用分页存储过程

Sql Server2005通用分页存储过程 CREATE PROCEDURE [dbo].[Common_GetPagedList] ( @TableName nvarchar(100), --表名 @ColumnNames nvarchar(1000) = '*', --字段名集合(全部字段为*,其它逗号分隔) @OrderClause nvarchar(1000), --排序从句(不包含order by) @WhereClause nvarchar(1000) =N' 1=1 ',   

SQL Server 2008 分页存储过程

在用的,已经不知道出处了,如果有侵权请告诉我,我立刻删掉. USE [ActivaOnlineSupport] GO /****** Object: StoredProcedure [dbo].[PROCE_PAGECHANGE] Script Date: 08/13/2014 13:45:17 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[PROCE_PAGECHANGE] ( @

SQL Server 公共分页存储过程及使用方法

-- 使用方法:在获取查询列表的存储过程中执行,并指定参数就行了-- exec ListPage @SQL, @PageSize, @PageNo, @OrderStr, @OrderType-- @SQL   查询语句-- @PageSize 数据数量-- @PageNo  当前页码-- @OrderStr 排序字段-- @OrderType 排序 0 ASC 1 DESCUSE [DataBaseName]--数据库名称GOSET ANSI_NULLS ONGOSET QUOTED_IDEN

SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)

原文:SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页) SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅途(www.Zuowenjun.cn) --CreateDate:2015-06-02 --Function:分页获取数据 /******************/ crea

SQL Server基础之<存储过程>

  简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理.本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作. 一:存储过程概述  SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQL Server数据库与应用程序之间的编程接口.在很多情况下,一些代码会被开发者重复编写多次,如果每次都编写相同功能

浅谈SQL Server数据库分页

数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多方法了.之前在面试中遇到过这一问题,问如何高效实现数据库分页.刚好上周在业务中也遇到了这个需求,所以在这里简单记录和分享一下. 一 需求 这里以SQLServer的示例数据库NorthWind为例,里面有一张Product表,现在假设我们的需求是要以UnitPrice降序排列,并且分页,每一页10条

Sql Server 数据分页

1.引言 在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定量的数据,这就是数据要分页. 2.常用的数据分页方法 我们经常会碰到要取n到m条记录,就是有分页思想,下面罗列一下一般的方法. 我本地的一张表 tbl_FlightsDetail,有300多W记录,主键 FlightsDetailID(Guid),要求按照FlightsDetailID排序 取 3000001 到3000010 之间的10条记录,也是

Sql Server系列:存储过程

1. 存储过程简介 存储过程是使用T-SQL代码编写的代码段.在存储过程中,可以声明变量.执行条件判断语句等其他编程功能.在MS SQL Server 2012中存储过程主要分三类:系统存储过程.自定义存储过程和扩展存储过程. 存储过程的优点: ◊ 存储过程加快系统允许速度,存储过程只在创建时编译,以后每次执行时不需要重新编译. ◊ 存储过程可以封装复杂的数据库操作,简化操作流程. ◊ 可实现模块化的程序设计,存储过程可以多次调用,提供统一的数据库访问接口,改进应用程序的可维护性. ◊ 存储过程