USE [master]
GO
/****** Object:  StoredProcedure [dbo].[GetRecordSet]    Script Date: 07/03/2011 23:55:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*分页查找数据*/
ALTER PROCEDURE [dbo].[GetRecordSet]
@strSql varchar(8000),--查询sql,如select * from [user]
@PageIndex int,--查询当页号
@PageSize int--每页显示记录
AS
set nocount on
declare @p1 int
declare @currentPage int
set @currentPage = 0
declare @RowCount int
set @RowCount = 0
declare @PageCount int
set @PageCount = 0
exec sp_cursoropen @p1 output,@strSql,@scrollopt=1,@ccopt=1,@rowcount=@rowCount output --得到总记录数
select @PageCount=ceiling(1.0*@rowCount/@pagesize) --得到总页数
,@currentPage=(@PageIndex-1)*@PageSize+1
select @RowCount,@PageCount
exec sp_cursorfetch @p1,16,@currentPage,@PageSize
exec sp_cursorclose @p1
set nocount off

Create PROCEDURE [dbo].[GetRecordWithPage] 
@fieldsType nvarchar(1000),   --字段列表(带类型),用于@t表变量的字段声明,如:PhotoID int,UserID int,PhotoTitle nvarchar(50) 
@fieldsList nvarchar(500),    --字段列表(不带类型),用于分页部分读取@t表变量的字段,也可使用*代替,但性能会下降,如:PhotoID ,UserID ,PhotoTitle 
@selectSrting nvarchar(2000), --向@t表变量中读取记录的Select语句 
@resultOrderBy nvarchar(200), --对分页结果进行排序的字段,如:升序'PhotoID ASC'、降序'PhotoID DESC',注意:如果是降序的话要在selectSrting和此处都加DESC 
@pageSize INT,                --页尺寸,0表示返回所有行 
@currentPage INT,             --当前页,首页为1 
@RecordCount INT OUTPUT       --非0值则返回记录总数 
AS 
BEGIN 
    DECLARE @strSql varchar(4000) 
    declare @sql nvarchar(1000) 
    SET @strSql = 'DECLARE @t TABLE(' +@fieldsType+ ');' 
    SET @strSql = @strSql + 'INSERT INTO @t '+@selectSrting+ ';' 
    set @sql = @strSql + 'select @aa=count(*) from @t;'  
    exec sp_executesql @sql,N'@aa int output',@RecordCount OUTPUT; 
    IF @pageSize=0 
        SET @strSql=@strSql+'SELECT '+@fieldsList+' FROM @t;' 
    ELSE 
        IF @currentPage=1 
            SET @strSql=@strSql+'select TOP('+STR(@pageSize)+')'+@fieldsList+' FROM @t;' 
        ELSE 
            BEGIN 
                SET @strSql =@strSql+'SELECT TOP('+Str(@pageSize)+')'+ @fieldsList+'FROM (SELECT TOP('+Str(@pageSize * @currentPage)+')'+@fieldsList+' , ROW_NUMBER() OVER (ORDER BY '+@resultOrderBy+')' 
                SET @strSql =@strSql+' AS RowNumber FROM @t' 
                SET @strSql =@strSql+') AS r WHERE r.RowNumber >' + Str(@pageSize * (@currentPage - 1))+';' 
            END 
    EXEC(@strSql) 
END

自已写的几个分页的存储过程相关推荐

  1. SQL SERVER两种分页的存储过程介绍

    由于现在很多的企业招聘的笔试都会让来招聘的写一个分页的存储过程,有的企业甚至要求应聘者用两种方式实现分页,如果没有在实际项目中使用过分页,那么很多的应聘者都会出现一定的问题,下面介绍两种分页的方法. ...

  2. SqlServer分页排序存储过程 V1.0

    set ANSI_NULLS ON  set QUOTED_IDENTIFIER ON  GO  /*  分页排序存储过程 V1.0  */ ALTER procedure [dbo].[sp_Key ...

  3. Oracle大数据量分页通用存储过程

    type refCursorType is REF CURSOR;  --游标类型定义,用于返回数据集 /*********************************************** ...

  4. MSSQLServer基础07(事务,存储过程,分页的存储过程,触发器)

    事务 事务:保证多个操作全部成功,否则全部失败,这处机制就是事务 思考:下了个订单,但是在保存详细信息时出错了,这样可以成功吗? 数据库中的事务:代码全都成功则提交,如果有某一条语句失败则回滚,整体失 ...

  5. JS 自写datapage.js 通用分页

    JS 自写datapage.js 通用分页 var Page = function () { }; Page.prototype = { Loading: "<img src='/Co ...

  6. 实现小数据量和海量数据的通用分页显示存储过程

          建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种 ...

  7. SQL Server 的通用分页显示存储过程

    建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...

  8. oracle入门(8)——实战:支持可变长参数、多种条件、多个参数排序、分页的存储过程查询组件...

    [本文介绍] 学了好几天,由于项目需要,忙活了两天,写出了个小组件,不过现在还只能支持单表操作.也没考虑算法上的优化,查询速度要比hibernate只快了一点点,可能是不涉及多表查询的缘故吧,多表的情 ...

  9. 一个利用sql 语句来实现分页的存储过程

    最近一直在研究存储过程和函数,感觉这趟水有点浑,所以我决定要趟这趟浑水. 一些是一个sql server的分页存储过程,可以结合页面设计来进行理解 假设场景有,上一页 下一页两个按钮,排序方式悬着下拉 ...

最新文章

  1. Java数据结构与算法(25) - ch11哈希(双重哈希)
  2. MySql UBUNTU下复制配置
  3. 手把手带你入门 Spring Security!
  4. sonar plugin DefaultMeasure与DefaultHighlighting
  5. 汇编程序基本原理知识笔记
  6. 离线部署CDH5.16.1及各种坑
  7. Base64编码解码原理
  8. 功放音量调节原理_玩汽车音响,功放和喇叭,应该如何做好匹配?
  9. php yii2 路径问题,yii2常用路径获取
  10. cte公用表表达式_SQL Server中的CTE; 查询公用表表达式
  11. hprof文件分析工具_应用稳定性优化系列(三),资源泄露问题分析及定位
  12. 49个Python学习资源:从初学者到高级玩家都有了
  13. 什么是广域网(WAN、公网、外网),什么是局域网(LAN、私网、内网)
  14. iOS12系统这5个隐藏小技巧!你一定要知道,好用到停不下来!
  15. 解决Linux系统centos7的开机报错:Welcome to emergency mode
  16. CAXA 2020电子图板设计从入门到精通视频教程
  17. NONMEM基础模型
  18. java计算点在圆内外_Java—PTA 点是否在圆内?
  19. 多项logit模型 matlab,用matlab求解logit模型的问题,
  20. c0000218错误的解决

热门文章

  1. 数据库几种连接方式的(左右union all)
  2. spring Quartz cron表达式
  3. Managing Tables
  4. mysql命令行的一些小技巧
  5. ubuntu16.04 编译opencv4和opencv_contrib
  6. java 中方法重载
  7. nodejs 利用zip-local模块压缩文件夹
  8. nginx 配置404错误页面
  9. 我是一只IT小小鸟读书笔记3
  10. HDU 1153 magic bitstrings(读题+)