/*--分页方法:回复人: j9988(j9988) 
--*/
declare @sqlstr nvarchar(4000), --查询字符串
@pagecount int, --第N页
@pagesize int --每页行数select @pagecount=3,@pagesize=10
,@sqlstr='select * from sysobjects'set nocount on
declare @P1 int, --P1是游标的id
@rowcount intexec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select @rowcount as 总行数,ceiling(1.0*@rowcount/@pagesize) as 页数,@pagecount as 当前页
set @pagecount=(@pagecount-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@pagecount,@pagesize 
exec sp_cursorclose @P1

解决方案 »

  1.   

    上述方法简单且效率高,已知的问题就是要多返回一个空的记录集解决的方法是在前台调用时,用 set recordset=recordset.nextrecordset的方法跳过第一个记录集
      

  2.   

    查询第X页,每页Y条记录最基本的处理方法(原理):如果表中有主键(记录不重复的字段也可以),可以用类似下面的方法,当然y,(x-1)*y要换成具体的数字,不能用变量:select top y * from 表 where 主键 not in(select top (x-1)*y 主键 from 表)如果表中无主键,可以用临时表,加标识字段解决.这里的x,y可以用变量.select id=identity(int,1,1),*  into #tb from 表
    select * from #tb where id between (x-1)*y and x*y-1
      

  3.   

    操作表Title表
    字段:
    =======
    TitleID INT 主题编号(关键字)
    Title Nvarchar(256) 主题
    Content Nvarchar(4000) 主题内容
    ForumID INT 所属论坛
    UserID INT  发帖人
    Expression INT 表情
    TotalPosts INT 总的回帖数
    ReadCount INT 访问量(点击率)
    LastActiveTime DateTime 最后发贴时间
    DateCreate DateTime 创建时间
      

  4.   

    zjcxc(邹建) 第一眼看 邹兄的代码 有点模糊 我再仔细考虑一下!!
    有些东西 没用过!
      

  5.   

    exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
    select @rowcount as 总行数,ceiling(1.0*@rowcount/@pagesize) as 页数,@pagecount as 当前页
    set @pagecount=(@pagecount-1)*@pagesize+1
    exec sp_cursorfetch @P1,16,@pagecount,@pagesize 
    exec sp_cursorclose @P1
    =========================================
    这一段有点难懂!!
      

  6.   

    那些全部是SQL没有公开的扩展存储过程,所以你不必去理解语句,只要用就行了.
      

  7.   

    你的第二个方案:
    查询第X页,每页Y条记录最基本的处理方法(原理):如果表中有主键(记录不重复的字段也可以),可以用类似下面的方法,当然y,(x-1)*y要换成具体的数字,不能用变量:select top y * from 表 where 主键 not in(select top (x-1)*y 主键 from 表)如果表中无主键,可以用临时表,加标识字段解决.这里的x,y可以用变量.select id=identity(int,1,1),*  into #tb from 表
    select * from #tb where id between (x-1)*y and x*y-1
    =======================================
    因为这里是用时间排序 所以 采用这种方法 得到的记录数将会不相同!!
      

  8.   

    >>>那些全部是SQL没有公开的扩展存储过程,所以你不必去理解语句,只要用就行了.=========================================
    我试试 前面的一个方法!!
    能对以下的参数运用作一个简短的介绍吗?谢谢
    ==========
    exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
    select @rowcount as 总行数,ceiling(1.0*@rowcount/@pagesize) as 页数,@pagecount as 当前页
    set @pagecount=(@pagecount-1)*@pagesize+1
    exec sp_cursorfetch @P1,16,@pagecount,@pagesize 
    exec sp_cursorclose @P1
    ======================
    比喻 在exec sp_cursorfetch  中参数16是指什么意思呢??
    我查了一下帮助 没得到结果!
      

  9.   

    代码是这样写的:CREATE   PROCEDURE ProcSelectTitlePage   
           @pagecount int,            /*页码--第N页*/
           @pagesize int,          /*页大小--每页行数*/
    as
       /*--分页方法--*/
    declare @sqlstr nvarchar(4000), --查询字符串
    --@pagecount int, --第N页
    --@pagesize int --每页行数--select @pagecount=3,@pagesize=10
    set @sqlstr='select * from View_Titles'set nocount on
    declare @P1 int, --P1是游标的id
    @rowcount intexec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
    select @rowcount as 总行数,ceiling(1.0*@rowcount/@pagesize) as 页数,@pagecount as 当前页
    set @pagecount=(@pagecount-1)*@pagesize+1
    exec sp_cursorfetch @P1,16,@pagecount,@pagesize 
    exec sp_cursorclose @P1GO===================完全照抄!
      

  10.   


    create   PROCEDURE ProcSelectTitlePage   
           @pagecount int,            /*页码--第N页*/
           @pagesize int          /*页大小--每页行数*/
    as
       /*--分页方法--*/
    declare @sqlstr nvarchar(4000) --查询字符串
    --@pagecount int, --第N页
    --@pagesize int --每页行数--select @pagecount=3,@pagesize=10
    set @sqlstr='select * from sysobjects'set nocount on
    declare @P1 int, --P1是游标的id
    @rowcount intexec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
    select @rowcount as 总行数,ceiling(1.0*@rowcount/@pagesize) as 页数,@pagecount as 当前页
    set @pagecount=(@pagecount-1)*@pagesize+1
    exec sp_cursorfetch @P1,16,@pagecount,@pagesize 
    exec sp_cursorclose @P1GO