这个存储过程是现在项目中分页用到的,也在度娘上查了关于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
有谁能告诉我这个存储过程分页的原理吗?
最新推荐文章于 2022-08-14 19:46:47 发布