ALTER PROC [dbo].[sp_PageView]
 @Sql         ntext,     --要执行的sql语句
 @PageIndex int=1,     --要显示的页码
 @PageSize    int=10,    --每页的大小
 @PageCount   int OUTPUT, --总页数
 @RecordCount int OUTPUT
AS
 SET NOCOUNT ON
 DECLARE @p1 int
 --初始化分页游标
 EXEC sp_cursoropen 
  @cursor=@p1 OUTPUT,
  @stmt=@sql,
  @scrollopt=1,
  @ccopt=1,
  @rowcount=@PageCount OUTPUT
 --计算总页数
 IF ISNULL(@PageSize,0)<1 
 SET @PageSize=10
 SET @RecordCount = @PageCount
 SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
 IF ISNULL(@PageIndex,0)<1 OR ISNULL(@PageIndex,0)>@PageCount
    SET @PageIndex=1
 ELSE 
     SET @PageIndex=(@PageIndex-1)*@PageSize+1
 --显示指定页的数据
 EXEC sp_cursorfetch @p1,16,@PageIndex,@PageSize
 --关闭分页游标
 EXEC sp_cursorclose @p1 上面的是一个分页存储过程,求解:
1:为什么执行会先返回一个空的结果集
2:可以去掉吗

解决方案 »

  1.   

    楼主是如何执行的,显示的是第一页?@sql的查询里有数据么?
      

  2.   

    declare @p4 int
    set @p4=10
    declare @p5 int
    set @p5=96
    exec sp_PageView @Sql='select * from user',@PageIndex=1,@PageSize=10,@PageCount=@p4 output,@RecordCount=@p5 output
    select @p4, @p5执行后会有一个空的user结果集,一个正确分页的结果集和正确的后两个输出数据分页是正确的,只是不清楚为什么会有一个空的结果集
      

  3.   

    同求其他分页存储过程,支持自定义sql语句的,不是特定表或视图的分页
      

  4.   

    最笨,但最有效的测试方法。
    把代码从最后一行一行的去掉。。然后return 'succ'  一点一点的试就知道哪里出问题了。
    别着急