有谁能告诉我这个存储过程分页的原理吗?

这个存储过程是现在项目中分页用到的,也在度娘上查了关于SP_CURSOROPEN,SP_CURSORFETCH ,SP_CURSORCLOSE的用法,但是还是不能理解其处理的原理.有大牛知道的可否指点下啊.

 

ALTER PROCEDURE [DBO].[SP_PAGE] 
		@PAGE INT, 	      --当前页码
		@PAGESIZE INT,        --每页记录数
		@RECORDCOUNT INT OUT  --输出数据总条数
	AS 
		IF @PAGE < 1 SET @PAGE = 1
		IF @PAGESIZE < 1 SET @PAGESIZE = 1
		
	DECLARE @P1 INT;
	EXEC SP_CURSOROPEN @P1 OUTPUT, 'SELECT * FROM TEST', @SCROLLOPT =1, @CCOPT = 1, @RECORDCOUNT = @RECORDCOUNT OUTPUT 

	IF (@P1 != 0) 
		BEGIN 
			SET @PAGE = (@PAGE - 1) * @PAGESIZE+ 1 ;
			EXEC SP_CURSORFETCH @P1, 32, @PAGE, @PAGESIZE ;
			EXEC SP_CURSORCLOSE @P1 ;
		END

 

原版的存储过程是这样的:

ALTER PROCEDURE [DBO].[SPLITPAGE]
    @SQL NVARCHAR(4000),     --要执行的SQL语句
    @PAGE INT=1,             --要显示的页码
    @PAGESIZE INT,           --每页的大小
    @RECORDCOUNT INT=0 OUT,  --总记录数
    @PAGECOUNT INT=0 OUT     --总页数
AS
BEGIN
	IF @PAGE < 1 SET @PAGE = 1
	IF @PAGESIZE < 1 SET @PAGESIZE = 1
	    SET NOCOUNT ON
	    DECLARE @P1 INT
	    EXEC SP_CURSOROPEN @P1 OUTPUT, @SQL, @SCROLLOPT=1, @CCOPT=1, @ROWCOUNT=@PAGECOUNT OUTPUT
	    SET @RECORDCOUNT = @PAGECOUNT
	    SELECT @PAGECOUNT = CEILING(1.0*@PAGECOUNT/@PAGESIZE), @PAGE = (@PAGE-1)*@PAGESIZE+1
	    EXEC SP_CURSORFETCH @P1, 16, @PAGE, @PAGESIZE 
	    EXEC SP_CURSORCLOSE @P1
	SET NOCOUNT OFF
END


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值