加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 09:30:53 所属栏目:MsSql教程 来源:网络整理
导读:建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。 注意:数据量大、性能要求高的,请个性化处理。 div class="codetitle" a style="CURSOR: pointer" data="86060" class="copybut" id="copybut86060" onclick="doCopy('code86060')" 代码如

建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。
注意:数据量大、性能要求高的,请个性化处理。
<div class="codetitle"><a style="CURSOR: pointer" data="86060" class="copybut" id="copybut86060" onclick="doCopy('code86060')"> 代码如下:<div class="codebody" id="code86060">
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读