CREATE PROCEDURE GetDataPage_PreSto @pageSize int, @pageIndex int, @pageCount int output, @recordCount int output AS
declare @SQL varchar(1000)
select @recordCount=count(*) from PreSto
set @pageCount=ceiling(@recordCount*1.0/@pageSize)
if @pageIndex = 0 or @pageCount<=1
set @SQL='select top '+str(@pageSize)+' B.P_ID,B.P_Name,C.PC_Name from PreSto B,PreCate C where B.P_CID = C.PreC_ID and B.DL = 0 order by B.P_ID desc'
else if @pageIndex = @pageCount -1
 set @SQL='select * from ( select top '+str(@recordCount - @pageSize * @pageIndex)+' B.P_ID,B.P_Name,C.PC_Name from PreSto B,PreCate C where B.P_CID = C.PreC_ID and B.DL = 0 order by B.P_ID asc) TempTable order by P_ID desc'
else  set @SQL='select top '+str(@pageSize) +' * from ( select top '+str(@recordCount - @pageSize * @pageIndex)+' B.P_ID,B.P_Name,C.PC_Name from PreSto B,PreCate C where B.P_CID = C.PreC_ID and B.DL = 0 order by B.P_ID asc) TempTable order by P_ID desc' exec(@SQL)
GO现在问题是这样的,为了做测试,pageSize我设为5
结果前台显示查询结果的时候,小于等于11条记录的时候都正常,超过11条记录的时候,每超过一条,查询结果就多一个。
比如数据库里有12条记录的时候,会查询出13条;有13条记录的时候,会查询显示出15条;14条会显示17条;16条的时候,就真正多出一页(多出5条)……以此类推,到21条记录的时候,会多出10条
搞不清楚到底是哪里出错了,请大家帮我看看是不是存储过程里面写的有问题。

解决方案 »

  1.   

    试试看
    select @recordCount=count(*) from PreSto where DL = 0
      

  2.   

    CREATE PROCEDURE GetDataPage_PreSto
     @pageSize int
    , @pageIndex int = 0
    , @pageCount int output
    , @recordCount int output
    AS
    begin
    declare @SQL varchar(1000),@lowPageIndex int,@upperPageIndex int
    select @recordCount=count(*) from PreSto set @pageCount=ceiling(@recordCount*1.0/@pageSize)
    set @lowPageIndex = (@pageIndex - 1) * @pageCount
    set @upperPageIndex = @pageIndex * @pageCount - 1

    set @sql = ' select t.P_ID,t.P_Name,t.PC_Name from ( select B.P_ID,B.P_Name,C.PC_Name,Rn = row_number() over(order by B.P_ID from  PreSto B,PreCate C where B.P_CID = C.PreC_ID and B.DL = 0  ) t where rn between '
    +rtrim(@lowPageIndex)+' and '+rtrim(@upperPageIndex)

    exec (@sql) end