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

CREATE PROCEDURE procXXX
@Page int, --当前页码,从1开始
@PageSize int --每页记录数
AS
BEGIN
SET NOCOUNT ON
SELECT *
FROM tbTest
ORDER BY ID
OFFSET @PageSize*(@Page-1) ROW FETCH NEXT @PageSize ROWS ONLY
--查询总记录数,前台分页需要
SELECT COUNT(*) FROM tbTest
END

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

CREATE PROCEDURE procXXX
@Page int, --页索引
@PageSize int, --每页记录数
@Number nvarchar(50) = '', --产品编号
@Status smallint = -1 --状态
AS
BEGIN
SET NOCOUNT ON
DECLARE @sql nvarchar(MAX), @condition nvarchar(MAX)
SET @condition = '1=1'
IF @Number <> ''
BEGIN
SET @condition += ' AND Number LIKE ''%' + @Number + '%'''
END
IF @Status <> -1
BEGIN
SET @condition += ' AND Status = ' + STR(@Status)
END
SET @sql='SELECT ID,Number
FROM tbProduct
WHERE '+@condition+'
ORDER BY ID DESC
OFFSET ' + STR(@PageSize*(@Page-1)) + ' ROW FETCH NEXT ' + STR(@PageSize) + ' ROWS ONLY
SELECT COUNT(*)
FROM tbProduct
WHERE '+@condition
EXECUTE(@sql)
END

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

create procedure procXXX
@Page int, --页索引
@PageSize int --每页记录数
as
begin
set nocount on;
declare @sql nvarchar(1000)
declare @condition nvarchar(500)
set @condition = '1=1'
set @sql='SELECT TOP '+str(@PageSize)+' *
FROM tbTest
WHERE '+@condition+'
AND (ID NOT IN(SELECT TOP '+str(@PageSize*(@Page-1))+' ID
FROM tbTest WHERE ID > 0 '+@condition+'
ORDER BY ID))
ORDER BY ID
SELECT COUNT(*) FROM tbTest WHERE '+@condition
execute(@sql)
end

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

最新文章

  1. PHP 做文件校验,MD5,CRC32,SHA等
  2. Cenots7编译Opencv3.1错误:下载ippicv,解决方案
  3. app快速开发
  4. Ubuntu配置java环境变量
  5. Javascript 笔记与总结(2-1)Javascript 与 DOM
  6. MVC ViewData和ViewBag[转]
  7. Warning: Invalid argument supplied for foreach()
  8. 文字排版--删除线(text-decoration:line-through)
  9. C#解leetcode 189. Rotate Array
  10. php 通过ip获取地理位置
  11. 简单实用后台任务执行框架(Struts2+Spring+AJAX前端web界面可以获取进度)
  12. Gradle 载入中 Android 下一个.so档
  13. SG函数学(hua)习(shui)记录
  14. 在CentOS6.9 x86下编译libusb-1.0.22遇到的两个问题
  15. CMS GC启动参数优化配置
  16. 让Hibernate和触发器协同工作
  17. std::bind常见的坑
  18. Rails中实现批量删除
  19. JDB调试代码 20165324 何春江
  20. DevStore分享:详析消费者十大心理学

热门文章

  1. SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制
  2. 2021-2-28:调用 System.gc() 后究竟发生了什么?
  3. 微信小程序使用彩色图标(阿里巴巴 iconfont Symbol 的用法)微信小程序使用彩色图标(阿里巴巴 iconfont Symbol 的用法)
  4. MySql 基础使用(一)
  5. golang——win10环境protobuf的使用
  6. NumPy 将停止支持 Python 2
  7. 如何优雅的移植JavaScript组件到Blazor
  8. 【codeforces - 1307G】Cow and Exercise
  9. springboot 配置文件application
  10. Linux wget 使用笔记