源表不限,在输入的SQLSTR中确定,比如:
SQLSTR="select * from table "
得到的记录总共有458条,则ReCount为458
 每页显示记录数PageSize 为10,那么总页数PageCount为46
要显示的页码PageNo为10,那输出来临时表的记录为
第101条到第110条记录。
这个我用VB做了一个DLL可以达到了,但是要是记录太多的时候速度跟不上,因此想移植到数据库中做一个存储过程来处理。

解决方案 »

  1.   

    写个存储过程:
    create procedure page_mk
    (
     @page int output,
     @record int output
    )
    as
    begin
      select *,identity(int,1,1) as ord into #tmp_1 from table order by ...
      select *,cast(ord/10+1 as int) as pageno into #tmp_2 from #tmp_1 order by ord
      set @record=@@rowcount
      set @page=(select top 1 pageno from #tmp_2 order by pageno desc)
      select * from #tmp_2 
    end
      

  2.   

    to: net_steven(吃素的狼) 
    方法不错,提点小建议:
    首先按milchcow(奶牛)的意思(这名字怎么这么怪),应该还有两个输入参数:@PageSize 和 @PageNo。  
    另外,如果#tmp_1已经有了序号,那么就不需要tmp_2表了,直接选择序号为@PageSize * (@PageNo - 1) + 1到@PageSize * @PageNo 的记录应该就可以满足要求了。
    即:select * from #tmp_1 where ord between @PageSize * (@PageNo - 1) + 1 and @PageSize * @PageNo
    至于输出值,有个总记录数就行了,总页数应用程序自己就能得出,不用存储过程来算。
      

  3.   

    to: net_steven(吃素的狼) 
    方法不错,提点小建议:
    首先按milchcow(奶牛)的意思(这名字怎么这么怪),应该还有两个输入参数:@PageSize 和 @PageNo。  
    另外,如果#tmp_1已经有了序号,那么就不需要tmp_2表了,直接选择序号为@PageSize * (@PageNo - 1) + 1到@PageSize * @PageNo 的记录应该就可以满足要求了。
    即:select * from #tmp_1 where ord between @PageSize * (@PageNo - 1) + 1 and @PageSize * @PageNo
    至于输出值,有个总记录数就行了,总页数应用程序自己就能得出,不用存储过程来算。
      

  4.   

    TO bluepower2008(蓝色力量):
    我的名字很怪吗?我怎么不觉得呢?
      

  5.   

    to bluepower2008(蓝色力量): 我是假设他每次查询时临时再分页的情况(动态分页),
    如果预先分页查询时当然方便,但维护的操作会复杂很多。这个情况跟我曾做过的财务的
    三栏帐、日记帐的帐页查询很相似。