我也不是很明白,
说一下吧,
有个疑问,你存储过程中是怎么提取第多少条记录的,不是用TOP 来控制的吗?

解决方案 »

  1.   

    --你可以试试SQL自带的分页
    /*--利用SQL未公开的存储过程实现分页

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

    此方法由J9988提供,我只是将它改成了方便调用的存储过程--邹建 2004.05(引用请保留此信息)--*//*--调用示例

    exec p_splitpage 'select id,name from sysobjects where xtype=''U'' order by id',1,5
    --*/
    create procedure p_splitpage   
    @sql nvarchar(4000), --要执行的sql语句
    @currentpage int=2,  --要显示的页码
    @pagesize int=10, --每页的大小
    @pagecount int=0 out --总页数
    as
    set nocount on
    declare @p1 intexec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount outputselect @pagecount=ceiling(1.0*@pagecount/@pagesize)
    ,@currentpage=(@currentpage-1)*@pagesize+1
    exec sp_cursorfetch @p1,16,@currentpage,@pagesize 
    exec sp_cursorclose @p1
    go
      

  2.   

    得到最后一页的余数
    declare @Jlsum int --记录总数
    declare @yysum int --最后一页的记录余数
    select @jlsum = count(*) from tab_bar_barcode
    select @yysum = @jlsum -6000*(页的总数-1)
    --或者
    select @yysum = @jlsum%6000
      

  3.   

    这样用的邹建大侠 exec p_listPage
    'tab_bar_barcode ',
    '*','brbc_barcode',6000,2,0,''  这是存储过程提取的第二页的条数为6000的记录
      

  4.   

    参数说明
    @tblName   varchar(1000),       -- 表名
    @strGetFields varchar(1000) = '*',  -- 需要返回的列
    @fldName varchar(255)='',      -- 排序的字段名
    @PageSize   int = 10,          -- 页尺寸
    @PageIndex  int = 1,           -- 页码
    @OrderType bit = 0,  -- 设置排序类型, 非 0 值则降序
    @strWhere  varchar(1500) = ''  -- 查询条件 (注意: 不要加 where)
      

  5.   

    用你的存储过程更好用,我的问题是我怎样做一个循环把原来的
    select * from tab_bar_barcode 分成若干步奏传完,但是让客户看到的是
    一次性所有的数据
    还等同于select * from tab_bar_barcode ,因为我要分批把他转换成xml
      

  6.   

    这样就没有必要用分页,直接查询就行了因为SQL会自动分批传输数据到客户端,除非你的网络不好.
      

  7.   

    谢谢,邹大侠,但是我用的是java的webservice ,客户端用的是delphi,他们之间的数据传输用的是
    xml格式,如果客户提取超过10万条记录,系统就会报错,因为我要把得到的数据转换成xml放到一个字符窜缓存中,因为他有限制的
    我现在分页是为了把这些数据分批地传给客户端显示,但给客户的感觉还是一次传给客户 ,实际上分批地处理成xml再次谢谢 邹大侠尽量帮我想想,我实在因为这个项目交不了差