以下为最基本的代码结构,SQL Server 2012 开始支持

  1. CREATE PROCEDURE procXXX
  2. @Page int, --当前页码,从1开始
  3. @PageSize int --每页记录数
  4. AS
  5. BEGIN
  6. SET NOCOUNT ON
  7. SELECT *
  8. FROM tbTest
  9. ORDER BY ID
  10. OFFSET @PageSize*(@Page-1) ROW FETCH NEXT @PageSize ROWS ONLY
  11. --查询总记录数,前台分页需要
  12. SELECT COUNT(*) FROM tbTest
  13. END

实际使用时,可以采用拼接SQL的方式,因为两个查询语句的查询条件相同,这样只需要拼接一次查询条件,另外,如果需要动态排序,也需要拼接SQL,因为排序条件不接受SQL参数

  1. CREATE PROCEDURE procXXX
  2. @Page int, --页索引
  3. @PageSize int, --每页记录数
  4. @Number nvarchar(50) = '', --产品编号
  5. @Status smallint = -1 --状态
  6. AS
  7. BEGIN
  8. SET NOCOUNT ON
  9. DECLARE @sql nvarchar(MAX), @condition nvarchar(MAX)
  10. SET @condition = '1=1'
  11. IF @Number <> ''
  12. BEGIN
  13. SET @condition += ' AND Number LIKE ''%' + @Number + '%'''
  14. END
  15. IF @Status <> -1
  16. BEGIN
  17. SET @condition += ' AND Status = ' + STR(@Status)
  18. END
  19. SET @sql='SELECT ID,Number
  20. FROM tbProduct
  21. WHERE '+@condition+'
  22. ORDER BY ID DESC
  23. OFFSET ' + STR(@PageSize*(@Page-1)) + ' ROW FETCH NEXT ' + STR(@PageSize) + ' ROWS ONLY
  24. SELECT COUNT(*)
  25. FROM tbProduct
  26. WHERE '+@condition
  27. EXECUTE(@sql)
  28. END

以下为旧版的分页存储过程,支持早期SQL Server版本,必须使用拼接SQL的方式,因为TOP后面不接受参数。

  1. create procedure procXXX
  2. @Page int, --页索引
  3. @PageSize int --每页记录数
  4. as
  5. begin
  6. set nocount on;
  7. declare @sql nvarchar(1000)
  8. declare @condition nvarchar(500)
  9. set @condition = '1=1'
  10. set @sql='SELECT TOP '+str(@PageSize)+' *
  11. FROM tbTest
  12. WHERE '+@condition+'
  13. AND (ID NOT IN(SELECT TOP '+str(@PageSize*(@Page-1))+' ID
  14. FROM tbTest WHERE ID > 0 '+@condition+'
  15. ORDER BY ID))
  16. ORDER BY ID
  17. SELECT COUNT(*) FROM tbTest WHERE '+@condition
  18. execute(@sql)
  19. end

还有其他分页方式,比如从 SQL Server 2005 开始,可以使用 ROW_NUMBER,这里就不列举了。

分页系列之一:SQL Server 分页存储过程的更多相关文章

  1. Oracle分页查询和SQL server分页查询总结

    分页查询是项目中必不可少的一部分,难倒是不难,就是这些东西,长时间不用,就忘的一干二净了.今天特此总结一下这两款数据库分页查询的实现过程(只记录效率比较高的) 一.Oracle中的分页查询 1.通用分 ...

  2. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  3. SQL server分页的四种方法

    SQL server分页的四种方法 1.三重循环: 2.利用max(主键); 3.利用row_number关键字: 4.offset/fetch next关键字 方法一:三重循环思路  先取前20页, ...

  4. SQL server分页的四种方法(算很全面了)

      这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本.下面都用pageIndex表示页数,pageSize表示一页包含的记录.并且下面涉及到具体例子的,设定查询第2 ...

  5. SQL SERVER 分页方法

    最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的 ...

  6. SQL Server分页模板

    SQL Server分页模板 WITH T AS ( SELECT ROW_NUMBER() OVER(ORDER BY AlbumId ) AS row_number, * FROM (SELECT ...

  7. SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条

    SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...

  8. 解决hibernate对Sql Server分页慢的问题

    一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...

  9. 二、SQL Server 分页

    一.SQL Server 分页 --top not in方式 select top 条数 * from tablename where Id not in (select top 条数*页数 Id f ...

  10. SQL Server分页查询进化史

    分页查询一直SQL Server的一个硬伤,就是是经过一些进化,比起MySql的limit还是有一些差距. 一.条件过滤(适应用所有版本) 条件过滤的方法有很多,而思路就是利用集合的差集选择出目标集合 ...

随机推荐

  1. Vue学习笔记-VSCode安装与配置

    一  使用环境: windows 7 64位操作系统 二  VSCode安装与配置  1.下载: https://code.visualstudio.com 直接点击即可. 2. 点击按装程序,默认安 ...

  2. JS遍历对象的属性和值

    对于需要动态获取对象的某些属性和对应的值的时候,就需要遍历对象的属性和值. const user = { name: '张三', age: 20, addr: '湖北武汉', sex: '男' } / ...

  3. JS中try catch的用法

    在js中也可以使用try/catch语法,把可能发生异常的代码使用try包裹起来,然后在catch中对异常进行处理,处理后就不会影响后面代码的执行. const a = null try { cons ...

  4. es6 快速入门 系列

    es6 快速入门(未完结,持续更新中...) 前言 为什么要学习es6 es6对于所有javaScript开发者来说,非常重要 未来,es6将构成javaScript应用程序的基础 es6中很多特性, ...

  5. 鸿蒙的js开发部模式18:鸿蒙的文件上传到python服务器端

    1.首先鸿蒙的js文件上传,设置目录路径为: 构建路径在工程主目录下: 该目录的说明见下面描述: 视图构建如下: 界面代码: <div class="container"&g ...

  6. .NET Core Generic Host项目使用Topshelf部署为Windows服务

    1..NET Core Generic Host是什么? 在.NET Core 2.1版本加入了一种新的Host,即Generic Host(通用主机). 现在在2.1版本的Asp.Net Core中 ...

  7. AI换脸

    AI换脸 技术 调用到百度的AI接口,layui的图片上传,栅格化布局 核心代码 纯py文件运行 # encoding:utf-8 import requests import base64 impo ...

  8. 技术基础 | 在Apache Cassandra中改变VNodes数量的影响

    Apache Cassandra中num_tokens的默认值在4.0版本中将会有变化!这看起来好像只是在CHANGES.txt文件中做了个小小的改动,但实际上这个改动将会对集群的日常运维有着深远的影 ...

  9. AtCoder Beginner Contest 194

    A I Scream int main() { IOS; int a, b; cin >> a >> b; if(a + b >= 15 && b > ...

  10. httpd解析PHP

    1.vim /usr/local/apache2.4/conf/httpd.conf 编辑httpd的主配置文件 搜索ServerName,把ServerName www.example.com:80 ...