一个基于ROW_NUMBER()的通用分页存储过程代码

2022-05-24 0 868

建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。

注意:数据量大、性能要求高的,请个性化处理。


复制代码 代码如下:

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)

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 * FROM #Temp1)

DROP TABLE #Temp1

END

用法很简单,但必须在传入的SQL中使用ROW_NUMBER() OVER(…) AS RowIndex :

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

免责声明:
1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

NICE源码网 MsSql 一个基于ROW_NUMBER()的通用分页存储过程代码 https://www.niceym.com/60172.html