MSSQL中怎么实现分页存储过程
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,MSSQL中怎么实现分页存储过程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体如下:USE [DB_Common]GO/******
千家信息网最后更新 2025年11月08日MSSQL中怎么实现分页存储过程
MSSQL中怎么实现分页存储过程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
具体如下:
USE [DB_Common]GO/****** 对象: StoredProcedure [dbo].[Com_Pagination] 脚本日期: 03/09/2012 23:46:20 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO/************************************************************ * *Sql分页存储过程(支持多表分页存储) * *调用实例: EXEC Com_Pagination 100, --总记录数 0, --总页数 -- 'Person',--查询的表名 ' Person p LEFT JOIN TE a ON a.PID=p.Id ', --查询的表名(这里为多表) 'a.*', --查询数据列 'p.ID', --排列字段 'p.ID', --分组字段 2, --每页记录数 1, --当前页数 0, --是否使用分组,否是 ' a.pid=2'--查询条件 ************************************************************/CREATE PROCEDURE [dbo].[Com_Pagination]@TotalCount INT OUTPUT, --总记录数@TotalPage INT OUTPUT, --总页数@Table NVARCHAR(1000), --查询的表名(可多表,例如:Person p LEFT JOIN TE a ON a.PID=p.Id )@Column NVARCHAR(1000), --查询的字段,可多列或者为*@OrderColumn NVARCHAR(100), --排序字段@GroupColumn NVARCHAR(150), --分组字段@PageSize INT, --每页记录数@CurrentPage INT, --当前页数@Group TINYINT, --是否使用分组,否是@Condition NVARCHAR(4000) --查询条件(注意:若这时候为多表查询,这里也可以跟条件,例如:a.pid=2)ASDECLARE @PageCount INT, --总页数 @strSql NVARCHAR(4000), --主查询语句 @strTemp NVARCHAR(2000), --临时变量 @strCount NVARCHAR(1000), --统计语句 @strOrderType NVARCHAR(1000) --排序语句BEGINSET @PageCount = @PageSize * (@CurrentPage -1)SET @strOrderType = ' ORDER BY ' + @OrderColumn + ' 'IF @Condition != ''BEGIN IF @CurrentPage = 1 BEGIN IF @GROUP = 1 BEGIN SET @strCount = 'SELECT @TotalCount=COUNT(*) FROM ' + @Table + ' WHERE ' + @Condition + ' GROUP BY ' + @GroupColumn SET @strCount = @strCount + ' SET @TotalCount=@@ROWCOUNT' SET @strSql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @Column + ' FROM ' + @Table + ' WHERE ' + @Condition + ' GROUP BY ' + @GroupColumn + ' ' + @strOrderType END ELSE BEGIN SET @strCount = 'SELECT @TotalCount=COUNT(*) FROM ' + @Table + ' WHERE ' + @Condition SET @strSql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @Column + ' FROM ' + @Table + ' WHERE ' + @Condition + ' ' + @strOrderType END END ELSE BEGIN IF @GROUP = 1 BEGIN SET @strCount = 'SELECT @TotalCount=COUNT(*) FROM ' + @Table + ' WHERE ' + @Condition + ' GROUP BY ' + @GroupColumn SET @strCount = @strCount + ' SET @TotalCount=@@ROWCOUNT' SET @strSql = 'SELECT * FROM (SELECT TOP (2000) ' + @Column + ',ROW_NUMBER() OVER(' + @strOrderType + ') AS NUM FROM ' + @Table + ' WHERE ' + @Condition + ' GROUP BY ' + @GroupColumn + ') AS T WHERE NUM BETWEEN ' + STR(@PageCount + 1) + ' AND ' + STR(@PageCount + @PageSize) END ELSE BEGIN SET @strCount = 'SELECT @TotalCount=COUNT(*) FROM ' + @Table + ' WHERE ' + @Condition SET @strSql = 'SELECT * FROM (SELECT TOP (2000) ' + @Column + ',ROW_NUMBER() OVER(' + @strOrderType + ') AS NUM FROM ' + @Table + ' WHERE ' + @Condition + ') AS T WHERE NUM BETWEEN ' + STR(@PageCount + 1) + ' AND ' + STR(@PageCount + @PageSize) END ENDENDELSE --没有查询条件BEGIN IF @CurrentPage = 1 BEGIN IF @GROUP = 1 BEGIN SET @strCount = 'SELECT @TotalCount=COUNT(*) FROM ' + @Table + ' GROUP BY ' + @GroupColumn SET @strCount = @strCount + 'SET @TotalCount=@@ROWCOUNT' SET @strSql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @Column + ' FROM ' + @Table + ' GROUP BY ' + @GroupColumn + ' ' + @strOrderType END ELSE BEGIN SET @strCount = 'SELECT @TotalCount=COUNT(*) FROM ' + @Table SET @strSql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @Column + ' FROM ' + @Table + ' ' + @strOrderType END END ELSE BEGIN IF @GROUP = 1 BEGIN SET @strCount = 'SELECT @TotalCount=COUNT(*) FROM ' + @Table + ' GROUP BY ' + @GroupColumn SET @strCount = @strCount + 'SET @TotalCount=@@ROWCOUNT' SET @strSql = 'SELECT * FROM (SELECT TOP (2000) ' + @Column + ',ROW_NUMBER() OVER(' + @strOrderType + ') AS NUM FROM ' + @Table + ' GROUP BY ' + @GroupColumn + ') AS T WHERE NUM BETWEEN ' + STR(@PageCount + 1) + ' AND ' + STR(@PageCount + @PageSize) END ELSE BEGIN SET @strCount = 'SELECT @TotalCount=COUNT(*) FROM ' + @Table SET @strSql = 'SELECT * FROM (SELECT TOP (2000) ' + @Column + ',ROW_NUMBER() OVER(' + @strOrderType + ') AS NUM FROM ' + @Table + ') AS T WHERE NUM BETWEEN ' + STR(@PageCount + 1) + ' AND ' + STR(@PageCount + @PageSize) END ENDENDEXEC sp_executesql @strCount, N'@TotalCount INT OUTPUT', @TotalCount OUTPUTIF @TotalCount > 2000BEGIN SET @TotalCount = 2000ENDIF @TotalCount%@PageSize = 0BEGIN SET @TotalPage = @TotalCount / @PageSizeENDELSEBEGIN SET @TotalPage = @TotalCount / @PageSize + 1ENDSET NOCOUNT ONEXEC (@strSql)ENDSET NOCOUNT OFF/**调用实例:EXEC Com_Pagination 100, --总记录数 0, --总页数 -- 'Person',--查询的表名 ' Person p LEFT JOIN TE a ON a.PID=p.Id ', --查询的表名(这里为多表) 'a.*', --查询数据列 'p.ID', --排列字段 'p.ID', --分组字段 2, --每页记录数 1, --当前页数 0, --是否使用分组,否是 ' a.pid=2'--查询条件SELECT a.* FROM Person p LEFT JOIN TE a ON a.PID = p.IdWHERE a.pid = 2**/看完上述内容,你们掌握MSSQL中怎么实现分页存储过程的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
查询
字段
页数
分组
条件
存储
过程
语句
内容
实例
数据
方法
更多
问题
排序
束手无策
为此
原因
变量
对此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器机房配置
英创网络技术有限公司
大连科艺软件开发有限公司
电脑服务器和工作站通俗讲
数据库提示开机启动
dva数据库管理员
数据库检索工具作用
沃德网络技术有限公司招聘
5g网络技术是什么ys
啥是数据库水印溯源
swing列表数据库
pb软件开发的默认密码
怀旧服务器开区时间
北京赛车直播软件开发
软件开发账务怎么处理
上海魔冶网络技术有限公司怎么样
霍尼韦尔实时数据库
数据库删除满足两个字段语句
服务器怎么保留通信信息
网络安全教育论文200字
快捷指令查询数据库
电脑学软件开发
软件开发答辩 python
在硬件公司做软件开发
邮政社招软件开发岗笔试题库
国泰安数据库有融资率吗
网络安全幼儿园黑板报美篇
国际版pubg怎么换服务器
文献数据库有什么构成
联想td350服务器驱动