调用分页存储过程 ,查询语句是按照时间排序的,但是由于有好多时间是一样的,
所以当我翻到其他页的时候,有好多数据都显示不出来,怎么避免呢???

解决方案 »

  1.   

    你是用的一个通用的分页存储过程吧,那个存储过程对复杂的查询支持不好,排序也只能有一个字段,如果你用的是SQL 2005的数据库,可以选用一些较新的通用存储过程
      

  2.   

    我用的就是 sql2005 ,可是你说的通用的存储过程是哪个,能给我一个通用的吗``??谢谢
      

  3.   

    下面是我在用的一个,也是根据网上的做了一点修改吧
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[up_Page2005V2_Join]
        @TableName nvarchar(200), -- 表名
    @ReturnFields nvarchar(2000) = '*', -- 需要返回的列 
    @PageSize int = 10, -- 每页记录数
    @PageIndex int = 1, -- 当前页码
    @Where nvarchar(2000) = '', -- 查询条件
    @Orderfld nvarchar(2000)='', -- 排序字段名 最好为唯一主键
    @OrderType int = 1 -- 排序类型 1:降序 其它为升序
     
    AS
    BEGIN
        
         Begin Tran --开始事务
    Declare @TotalRecord int
    Declare @TotalPage int
        Declare @sql nvarchar(4000); 
            --计算总记录数
                 
            if (@Where='' or @Where=NULL)
                set @sql = 'select @TotalRecord = count(*) from ' + @TableName
            else
                set @sql = 'select @TotalRecord = count(*) from ' + @TableName + '  where ' + @Where        EXEC sp_executesql @sql,N'@TotalRecord int OUTPUT',@TotalRecord OUTPUT--计算总记录数       
        --计算总页数
        select @TotalPage=CEILING((@TotalRecord+0.0)/@PageSize)    if (@Where='' or @Where=NULL)
            set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @Orderfld + ') as rowId,' + @ReturnFields + ' from ' + @TableName 
        else
            set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @Orderfld + ') as rowId,' + @ReturnFields + ' from ' + @TableName + ' where ' + @Where    
                --处理页数超出范围情况
        if @PageIndex<=0 
            Set @pageIndex = 1
        
        if @pageIndex>@TotalPage
            Set @pageIndex = @TotalPage     --处理开始点和结束点
        Declare @StartRecord int
        Declare @EndRecord int
        
        set @StartRecord = (@pageIndex-1)*@PageSize + 1
        set @EndRecord = @StartRecord + @pageSize - 1    --继续合成sql语句
        set @Sql = @Sql + ') as t where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' +  Convert(varchar(50),@EndRecord)
         print @sql     Exec(@Sql)
        
        SELECT @TotalRecord as RecordCount,@TotalPage as PageCount
        ---------------------------------------------------
        If @@Error <> 0
          Begin
            RollBack Tran
            Return -1
          End
         Else
          Begin
            Commit Tran
            Return @TotalRecord ---返回记录总数
          End   
    END
      

  4.   

    http://www.cnblogs.com/rainsure/archive/2008/09/20/1294574.htmlup
      

  5.   

    order by _date desc, _id desc
      

  6.   


    CREATE PROCEDURE sp_EC_get_Store
    --@id int,
    @pagesize int,   --每页条数
    @pageindex int,  --页数
    @docount bit,  --是否进行统计
    @condition varchar(800)  --查询条件

     AS
    set nocount on if(@docount=1)
    exec('SELECT count(*) FROM EC_Web_StoreInfo a where 1=1 '+@condition) else
    begin
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound
    set @PageLowerBound=@PageLowerBound+1
    exec('declare @indextable table(id int identity(1,1),nid int)
    insert into @indextable(nid) select a.id from EC_Web_StoreInfo a where 1=1 '+@condition+' order by a.id desc SELECT a.id, a.name, a.info, a.notice, a.address, a.CID, a.commend, Convert(varchar(10),a.addDate,120) as addDate,
    (select ClientName from web_Clients b where a.cid=b.ClientID) as ClientName,
    (select DName from Common_DCode c where c.DCode=a.address) as Area,
    substring(a.address,1,2) as areaCode,substring(a.address,3,2) as cityCode,substring(a.address,5,2) as countyCode
    FROM EC_Web_StoreInfo a, @indextable t  WHERE 1=1 '+@condition+' and  a.id=t.nid
    and t.id between '+@PageLowerBound+' and '+@PageUpperBound+' 
       order by t.id ')
    end
    set nocount off
    GO
      

  7.   

    原来普通不行,用sql2005就能解决, 我原来也遇到了这个问题,我网站的产品是按刷新时间排序,如果正常添加没有问题,刷新时间和添加时间是一致的。但是我是允许客户刷新产品的,一刷新,他的产品刷新时间全都相同了。比如他有30个产品,而每页才显示15个,就出现了你那个问题,不能正常分页即使这样排序order by _date desc, _id desc 也是会出问题。你换一个sql2005的存储过程
    sql2005里面有rownumber可以解决这个问题
      

  8.   

    如何用 sql2005里面有rownumber 解决这个问题呢~~???
      

  9.   


    select 姓名=aname,支出钱=amoney,收入钱='',时间=atime from a union all select bname,支出钱='',收入钱=bmoney,时间=btime from b order by 时间如果能生成一个自动增长列,那么我想按照这个列进行排序,然后调用分页存储过程的,所以如果能够生成这两个表的一个自动增长列呢??(我用的是sqlserver2005)