-- =============================================
-- Description:   <高效分页存储过程,适用于Sql2005以上>
-- Notes:      <排序字段强烈建议建索引>
-- Page2005'dyj_vclient','client_id,last_dt','client_id','last_dt','desc','',20,1,0
-- =============================================
CREATE Procedure [dbo].[sp_page] 
 @TableName varchar(2000),         --表名
 @Fields varchar(2000) = '*',    --字段名(全部字段为*)
 @PrimaryKey varchar(50),        --主键
 @OrderField varchar(500),      --排序字段(必须!支持多字段)
 @sqlWhere varchar(500) = Null,  --条件语句(不用加where)
 @pageSize int,                --每页多少条记录
 @pageIndex int = 1 ,           --指定当前为第几页
 @TotalPage int output          --返回总页数 
as
begin
 
    Begin Tran --开始事务
 
    Declare @sqlnvarchar(4000);
    Declare @totalRecordint;    
    ifisnull(@PrimaryKey,'')=''
      set @PrimaryKey='*'
    --计算总记录数
        
    if (@SqlWhere='' or@sqlWhere=NULL)
       set @sql = 'select @totalRecord = count('+@PrimaryKey +') from ' + @TableName
    else
       set @sql = 'select @totalRecord = count('+@PrimaryKey +') from ' + @TableName + ' where ' + @sqlWhere
 
    EXEC sp_executesql@sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数      
    
    --计算总页数
    select@TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
 
    if (@SqlWhere='' or@sqlWhere=NULL)
       set @sql = 'Select * FROM (select ROW_NUMBER()Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from '+ @TableName 
    else
       set @sql = 'Select * FROM (select ROW_NUMBER()Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from '+ @TableName + ' where ' + @SqlWhere   
       
    
    --处理页数超出范围情况
    if@PageIndex<=0 
       Set @pageIndex = 1
    
    if@pageIndex>@TotalPage
       Set @pageIndex = @TotalPage
 
    --处理开始点和结束点
    Declare @StartRecordint
    Declare @EndRecordint
    
    set @StartRecord =(@pageIndex-1)*@PageSize + 1
    set @EndRecord =@StartRecord + @pageSize - 1
 
    --继续合成sql语句
    set @Sql = @Sql + ') as[page_result_table] where rowId between ' +Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord)
    
    Exec(@Sql)
   ---------------------------------------------------
    If @@Error<> 0
     Begin
       RollBack Tran
       Return -1
     End
    Else
     Begin
       Commit Tran
       Return @totalRecord ---返回记录总数
      End   
end

SQL 2005 分页存储过程的更多相关文章

  1. Sql service 分页存储过程

    create database Exam_Week3 GO USE Exam_Week3 GO create table Classs ( ClaID ,), ClassName ), Counts ...

  2. 分页系列之一:SQL Server 分页存储过程

    以下为最基本的代码结构,SQL Server 2012 开始支持 CREATE PROCEDURE procXXX @Page int, --当前页码,从1开始 @PageSize int --每页记 ...

  3. sql server 分页存储过程

    ----------------------分页存储过程------------------------------------------------------------------------ ...

  4. C#调用SQL Server分页存储过程

    以SQL Server2012提供的offset ..rows fetch next ..rows only为例 e.g. 表名:Tab1 ------------------------------ ...

  5. [转]Sql Server 分页存储过程

    本文转自: 版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking  本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且 ...

  6. SQL实现分页存储过程

    SQL分页存储过程的编写: --获得分页的DATASET资源 ALTER PROC sp_GetSource( @PageSize INT, --每页显示条数 @PageIndex INT, --页码 ...

  7. SQL基础分页存储过程(案例一)

    --分页 存储过程 案例 -- 所执行的存储过程 create proc pageForUsers @currPage int, --当前页数 @pageSize int, --每页多少条记录 @co ...

  8. sql server分页存储过程

    因项目需要,一次性查询出来的数据过大,内存hold不住,所以特意写成分页查询,减小占用内存. 存储过程如下: USE [XXX] GO SET ANSI_NULLS ON GO SET QUOTED_ ...

  9. SQL Server分页存储过程通用存储过程

    CREATE proc [dbo].[p_paging]@tableName varchar(8000),          --表名.视图名@indexCol varchar(50) = 'id', ...

随机推荐

  1. boost thread

    #include <cassert> #include <iostream> #include <boost/ref.hpp> #include <boost ...

  2. Visual Studio 环境配置

    一.Productivity Power Tools 1.安装了之后有垂直的分隔线,取消 2.高亮选中匹配的代码 ① VS 2012 3.高亮当前的Tab选项卡

  3. SAP 经常使用T-CODE

    Plant Maintenance (PM) IW32 - Change Plant Maintenance Order  IW33 - Display Plant Maintenance Order ...

  4. twemproxy源码分析2——守护进程的创建

    twemproxy源码中关于守护进程的创建实现得比较标准,先贴出代码来,然后结合一些资料来分析和列举一些实现守护进程的常用方法,不过不得不说twemproxy的实现确实是不错的,注释都写在了代码中,直 ...

  5. CCNA2.0笔记_Trunk&EtherChannel

    show interfaces trunk //查看Trunk信息 show interfaces fastEthernet 0/1 //查看接口二层信息 show interfaces fastEt ...

  6. PHP——文本编辑器

    简单的代码演示 详细文件在文件目录里 <!doctype html> <html> <head> <meta charset="utf-8" ...

  7. Java逍遥游记读书笔记<一>

    前言 必须先来一句,这是入门级别,高手勿喷~ 写Android的时候总有一些语句不是很理解,其实大部分是Java的内容,所以想系统的学下Java. 这本书——<Java逍遥游记>是在图书馆 ...

  8. python3----练习题(装饰器)

    装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.也就是说装饰器的作用就是为已经存在的对象添加额外的功能. 当使用 ...

  9. caffe 网络参数设置

    weight_decay防止过拟合的参数,使用方式: 样本越多,该值越小 模型参数越多,该值越大 一般建议值: weight_decay: 0.0005 lr_mult, decay_mult 关于偏 ...

  10. SurvivalShooter学习笔记(一.相机跟随)

    1.场景碰撞已好,地板需建一Quad去掉渲染留下碰撞,设置layer为Floor:用于建立摄像机朝向地面的射线,确定鼠标停留点,确定主角需要的朝向. 2.设置摄像机跟随主角: 本例中摄像机设置为正交模 ...