mssql

推荐列表 站点导航

当前位置:首页 > 数据库 > mssql >

mssql 高效的分页存储过程分享

来源:网络整理  作者:网络  发布时间:2020-12-12 16:00
废话不多说,直接上结果,相信这也是大多数搜索答案的人最愿意看的方式。...
BEGIN
DECLARE @endRow INT
)
--declare @timediff datetime

  以下是存储过程的代码:

SET @beginRow = (@pageNo - 1) * @pageSize + 1
@recordTotal INT OUTPUT, --输出记录总数
set nocount off
DECLARE @tempCount NVARCHAR(1000)
CREATE PROCEDURE [dbo].[P_GridViewPager] (
DECLARE @tempLimit VARCHAR(200)
DECLARE @beginRow INT

@keyName VARCHAR(200) = 'Id', --索引字段

DECLARE @tempMain VARCHAR(1000)
@orderString VARCHAR(200), --排序条件
EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT

SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM (SELECT '+@keyName+' FROM '+@viewName+' WHERE '+@whereString+') AS my_temp'

复制代码 代码如下:

set nocount on
--select datediff(ms,@timediff,getdate()) as 耗时

最近在做一个几百万条数据的分页查询,研究了各种方案,在本机上用项目的实际数据库做测试,测试过程 is very 痛苦,不堪回首ing。现在废话不多说,直接上结果,相信这也是大多数搜索答案的人最愿意看的方式。

SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)

--select @timediff=getdate() --记录时间
@pageNo INT =1, --当前页
--主查询返回结果集

@viewName VARCHAR(800), --表名
SET @endRow = @pageNo * @pageSize
@pageSize INT = 20, --每页记录数
--PRINT @tempMain

GO
--输出参数为总记录数

@whereString VARCHAR(800) = '1=1' --WHERE条件

SET @tempMain = 'SELECT * FROM (SELECT ROW_NUMBER() OVER (order by '+@orderString+') AS rows ,'+@fieldName+' FROM '+@viewName+' WHERE '+@whereString+') AS main_temp WHERE '+@tempLimit
EXECUTE (@tempMain)


@fieldName VARCHAR(800) = '*', --查询字段
END

AS

相关热词: 分页 MSSQL

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://www.juheyunku.com/sql/mssql/2981.shtml

最新文章
sql server 关于设置null的一 sql server 关于设置null的一

时间:2020-12-28

详解SQL游标的用法 详解SQL游标的用法

时间:2020-12-27

vs code连接sql server数据库步 vs code连接sql server数据库步

时间:2020-12-27

图书管理系统的sqlserver数 图书管理系统的sqlserver数

时间:2020-12-25

详解SQL 通配符 详解SQL 通配符

时间:2020-12-25

sql四大排名函数之ROW_NUM sql四大排名函数之ROW_NUM

时间:2020-12-25

SQLServer数据库处于恢复挂 SQLServer数据库处于恢复挂

时间:2020-12-24

Win10 64位安装个人版SQL20 Win10 64位安装个人版SQL20

时间:2020-12-24

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

mssql 高效的分页存储过程分享

2020-12-12 编辑:网络

BEGIN
DECLARE @endRow INT
)
--declare @timediff datetime

  以下是存储过程的代码:

SET @beginRow = (@pageNo - 1) * @pageSize + 1
@recordTotal INT OUTPUT, --输出记录总数
set nocount off
DECLARE @tempCount NVARCHAR(1000)
CREATE PROCEDURE [dbo].[P_GridViewPager] (
DECLARE @tempLimit VARCHAR(200)
DECLARE @beginRow INT

@keyName VARCHAR(200) = 'Id', --索引字段

DECLARE @tempMain VARCHAR(1000)
@orderString VARCHAR(200), --排序条件
EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT

SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM (SELECT '+@keyName+' FROM '+@viewName+' WHERE '+@whereString+') AS my_temp'

复制代码 代码如下:

set nocount on
--select datediff(ms,@timediff,getdate()) as 耗时

最近在做一个几百万条数据的分页查询,研究了各种方案,在本机上用项目的实际数据库做测试,测试过程 is very 痛苦,不堪回首ing。现在废话不多说,直接上结果,相信这也是大多数搜索答案的人最愿意看的方式。

SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)

--select @timediff=getdate() --记录时间
@pageNo INT =1, --当前页
--主查询返回结果集

@viewName VARCHAR(800), --表名
SET @endRow = @pageNo * @pageSize
@pageSize INT = 20, --每页记录数
--PRINT @tempMain

GO
--输出参数为总记录数

@whereString VARCHAR(800) = '1=1' --WHERE条件

SET @tempMain = 'SELECT * FROM (SELECT ROW_NUMBER() OVER (order by '+@orderString+') AS rows ,'+@fieldName+' FROM '+@viewName+' WHERE '+@whereString+') AS main_temp WHERE '+@tempLimit
EXECUTE (@tempMain)


@fieldName VARCHAR(800) = '*', --查询字段
END

AS

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://www.juheyunku.com/sql/mssql/2981.shtml

相关文章

风云图片

推荐阅读

返回mssql频道首页