-- =============================================
-- 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. Atitit. html 使用js显示本地图片的设计方案.doc

    Atitit. html 使用js显示本地图片的设计方案.doc 1.  Local mode  是可以的..web模式走有的不能兰.1 2. IE8.0 显示本地图片 img.src=本地图片路径无 ...

  2. [容器]docker创建镜像

    手动创建: docker run -d -p mynginx:v2 nginx rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest- ...

  3. IE首页被篡改(手动修复)

    所谓手动修复,即以不变应万变,修改注册表,其实工具软件也只是帮你代工而已. win + R 打开 “运行”,键入 “regedit.exe” 打开注册表编辑器,在 路径 HKEY_LOCAL_MACH ...

  4. 机动车驾驶员计时培训系统符合性检测平台TCP服务器设计和开发

    驾校计时平台的TCP服务器,主要用于接入计时终端,计时终端与计时平台.计时平台与省级监管服务平台.省级监管服务平台与全国驾培平台的卫星定位过程明细数据和学时过程明细数据接口应使用基于JT/T 808标 ...

  5. sitemesh 2.4 装饰器学习

    SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的 SiteMesh是OpenSymphony团队开发的JEE框架之一,它是一个非常优秀的页面 ...

  6. Javaweb开发中关于不同地方出现的绝对路径和相对路径

    1.转发和包含路径 a)以“/”开头:相对当前项目路径,即默认为http://localhost:8080/项目名/ b)不以“/”开头:相对当前Servlet路径. eg:在Aservlet中写“B ...

  7. PHP学习笔记(9)文件上传

    index.php <!doctype html> <html lang="en"> <head> <meta charset=" ...

  8. 跟着百度学PHP[14]-初识PDO数据库抽象层

    目录: 00x1 php中的pdo是什么? 00x2 pdo创建一个PDO对象 00x1 php中的pdo是什么? 就是操作数据库的方法,pdo就是把操作数据库的函数封装成一个pdo类,其间做了安全验 ...

  9. SockIOPool

    1. SockIOPool – SockIO池化管理,为上层提供的接口是实例化函数[主要是指定memcached服务器地址,各个机器的权重]:根据key&hashCode获取SockIO-网络 ...

  10. JS实现背景图按时切换或者每次更新

    首先要有一个添加背景图片的div <div  id="myDiv"></div> css样式中添加背景tu图 body{height:100%;} #myD ...