一个基于ROW_NUMBER()的通用分页存储过程代码
接下来是存储过程的代码:
```sql
ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage]
@Sql VARCHAR(5000), -- 这里传入的是你的查询语句
@CurrentPageNo INT, -- 当前页码
@PageSize INT, -- 每页显示数量
@TotalNum INT OUTPUT -- 输出总记录数
AS
SET NOCOUNT ON
DECLARE @SqlCmd VARCHAR(5000)
-- 查询数据
SET @SqlCmd = 'SELECT FROM (' + @Sql + ') A WHERE RowIndex BETWEEN ' + CONVERT(VARCHAR, (@CurrentPageNo - 1) @PageSize + 1) + ' AND ' + CONVERT(VARCHAR, @CurrentPageNo @PageSize - 1)
EXEC(@SqlCmd)
PRINT (@SqlCmd)
-- 求记录总数
IF @TotalNum = -1 -- 如果需要获取总记录数,则执行下面的代码块
BEGIN
CREATE TABLE Temp1(num INT)
INSERT INTO Temp1 EXEC('SELECT count() FROM (' + @Sql + ') A')
SELECT @TotalNum = (SELECT TOP 1 num FROM Temp1) -- 获取临时表中的数值即为总记录数
DROP TABLE Temp1 -- 删除临时表
END
```
使用方式十分简便:首先定义一个包含ROW_NUMBER() OVER(...) AS RowIndex的SQL语句,然后传入相应的参数即可。例如:
```sql
DECLARE @Sql VARCHAR(5000)
DECLARE @CurrentPageNo INT
DECLARE @PageSize INT
DECLARE @TotalNum INT
SET @CurrentPageNo = 100
SET @PageSize = 10
SET @TotalNum = -1 -- 表示需要获取总记录数
SET @Sql = 'SELECT , ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowIndex FROM 表名 A WITH (NOLOCK)'
EXEC [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql, @CurrentPageNo, @PageSize, @TotalNum OUTPUT
SELECT @TotalNum -- 输出总记录数
```
通过这种方式,你可以轻松实现分页查询功能,提高数据处理的效率。请注意,对于数据量较大或对性能要求较高的场景,建议根据实际情况进行个性化处理,以获得更好的性能表现。
编程语言
- 一个基于ROW_NUMBER()的通用分页存储过程代码
- 解决Angular2 router.navigate刷新页面的问题
- js canvas实现简单的图像扩散效果
- 如何减少浏览器的reflow和repaint
- Asp.net中获取应用程序完整Url路径的小例子
- PHP simplexml_load_string()函数实例讲解
- asp中通过getrows实现数据库记录分页的一段代码
- sqlserver中查找所有包含了某个文本的存储过程
- Yii2学习笔记之汉化yii设置表单的描述(属性标签
- php集成环境xampp中apache无法启动问题解决方案
- 微信公众号判断用户是否已关注php代码解析
- php根据操作系统转换文件名大小写的方法
- ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
- 解决vue项目使用font-awesome,build后路径的问题
- codeigniter上传图片不能正确识别图片类型问题解决
- PHP下打开phpMyAdmin出现403错误的问题解决方法