日期:2014-05-18  浏览次数:20388 次

急急急`一个存储过程做分页是的问题``帮忙看看```
下边的存储过程``出错了```不知怎样解决

CREATE   PROCEDURE   testNew  
(

@tint_tableid   tinyint=1,             --这个是BBS的当前版面Id,你可以不用管他。。
@int_pagenow   int=0,                          
@int_pagesize   int=0,
@int_recordcount   int=0   output,       --就是得出BBS某个版面的总贴数。。
@xl   varchar(200),
@order   varchar(200)
)

AS
set   nocount   on

declare   @int_allid   int            
declare   @int_beginid   int,@int_endid   int      
declare   @int_pagebegin   int,   @int_pageend   int
declare   @sql1   varchar(400),@sql2   varchar(400)

--select   @int_allid=count(*)   from   tab_discuss   where   tint_level=0   and   tint_tableid=@tint_tableid
set   @sql1= 'select   @int_allid=count(*)   from   Product   where     '   +@xl
  exec   (@sql1)
        select   @int_recordcount=@int_allid                   --得出该版面的总贴数

set   @sql2= 'declare   cro_fastread   cursor     scroll  
for     select   Pr_id   from   Product   where   '+@xl+ '   order   by   '+@order
      --   for       select   Pr_id   from   Product   where   tint_level=0   and   tint_tableid=@tint_tableid   order   by   int_id   desc     --这里定义游标操作,但是不用临时纪录集,而且游标也不需要全部遍历所有纪录集。
exec   (@sql2)
        open   cro_fastread     --打开游标
        select   @int_beginid=(@int_pagenow-1)*@int_pagesize+1     --得出该页的第一个纪录Id
        select   @int_endid   =   @int_beginid+@int_pagesize-1             --得出该页的最后一个纪录的Id
       
        fetch   absolute     @int_beginid   from   cro_fastread   into   @int_pagebegin   --将他的Id传给一个变量该页开始的Id
        if   @int_endid> @int_allid                 --这里要注意,如果某一页不足固定页数的纪录时。如只有一页纪录,而且纪录少于我们定义的数目。或者是最后一页时。。。
                fetch   last   from   cro_fastread   into   @int_pageend       --直接将游标绝对定位到最后一条纪录,得出他的id号来。。。
        else
                fetch   absolute   @int_endid   from   cro_fastread   into   @int_pageend
                               
        select   pr_id,Pr_spec,pr_name,pr_picture,pr_price,pr_url,pr_brand,pr_sort2,pr_stoppro   from   Product   where     Pr_id   between   @int_pageend   and   @int_pagebegin   --order   by   int_rootid   desc,num_order   desc        
  --我们就可以利用该页的第一个id和最后一个id得出中间的id来。。。。(注意。我们这个BBS的数性结构用了一种很巧妙的算法,就是用一个orderNum浮点数即可完成排序。。。)

--开始清场。。。
        close   cro_f