int number = 0;
            if (curragePage > 1)
            {
                number = NUMCount * (curragePage - 1);
            }
            string strsql = "select top "
                           + NUMCount + " * from Tb_Info where  Infoid not in ( select top "
                           + number + " Infoid from Tb_Info order by Infoid desc )  order by Infoid desc";
            return GetTb_InfosBySql(strsql);
原来的 是 分页整个表。
 我修改成 只要表里 catid=21的数据 来分页。
select top "
  + NUMCount + " * from Tb_Info where catid ="
  + catid + " and Infoid not in ( select top "
  + number + " Infoid from Tb_Info order by Infoid desc ) order by Infoid desc但是  只查询出来4个数据  就查不了了。请教 sql达人啊。

解决方案 »

  1.   

    number  值等于多少! 你调试过么?
      

  2.   

      select top "+ number + "Infoid from Tb_Info where catid="+catid+" order by Infoid desc
      

  3.   

    参考存储过程分页:CREATE PROCEDURE dbo.CreateSimple
     2(
     3 @PageIndex int,
     4 @PageSize int
     5)
     6AS
     7BEGIN
     8 --定义三个变量:
     9 -- @PageLowerBound :所取出记录的下限.
    10 -- @PageUpperBound: 所要取出记录的上限.
    11 -- @TotalRecords: 返回记录总数,主要用于页面的计算.
    12 DECLARE @PageLowerBound int
    13 DECLARE @PageUpperBound int
    14 DECLARE @TotalRecords int
    15
    16 --计算上下限的值.
    17 SET @PageLowerBound=@PageIndex * @PageSize
    18 SET @PageUpperBound=@PageLowerBound+@PageSize-1
    19
    20--创建临时表:
    21--IndexId是标识,自动增长1;
    22--SimpleId由数据表[Simple]填充;
    23 CREATE TABLE #PageIndexForSimple
    24 (
    25  IndexId int identity(1,1) NOT NULL,
    26  SimpleId int
    27 )
    28--填充临时表
    29  INSERT INTO #PageIndexForSimple(SimpleId)
    30  SELECT s.[SimpleId]
    31  FROM [Simple] s
    32  --这里可以加WHERE condition和ODER BY语句
    33  
    34  --取得记录总数,其实影响行数就是记录总数
    35  SELECT @TotalRecords=@@ROWCOUNT
    36
    37  --获取我们所要的记录.
    38  SELECT s.*
    39  FROM [Simple] s,#PageIndexForSimple p
    40  WHERE s.[SimpleId]=p.[SimpleId]
    41            AND p.[IndexId]>=@PageLowerBound
    42            AND P.[IndexId]<=@PageUpperBound
    43  ORDER BY s.[Simple]
    44 
    45   --返回记录总数.
    46   RETURE @TotalRecords
    47END 调用
    Public List<Simple> GetSimple(int pageIndex,int pageIndex,out int totalRecords){
     2  List<Simple> entity=new List<Simple>();
     3  SqlParameter[]param=new SqlParameter[]{
     4     new SqlParameter("@PageIndex",SqlDbType.Int),
     5     new SqlParameter("@PageSize",SqlDbType.Int),
     6   new SqlParameter("@ReturnValue",SqlDbType.Int),
     7 };
     8  param[0].Value=pageIndex;
     9  param[1].Value=pageSize;
    10  param[2].Direction = ParameterDirection.ReturnValue;
    11  SqlDataReader reader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", param);
    12  While(reader.Read()){
    13   entity.Add(GetSimpleEntity(reader))
    14  }
    15  reader.Close();
    16  try{
    17       totalRecords=(int)param[2].Value;
    18  }catch{}
    19  return entity;
    20}
      

  4.   

    string strsql = "select top "
                               + NUMCount + " * from Tb_Info where  Infoid not in ( select top "
                               + number + " Infoid from Tb_Info where catid=21 order by Infoid desc ) and  catid=21 order by Infoid desc";
      

  5.   


    select top "
      + NUMCount + " * from Tb_Info where catid ="
      + catid + " and Infoid not in ( select top "
      + number + " Infoid from Tb_Info where catid ="
      + catid + " order by Infoid desc ) order by Infoid desc
    楼主漏了 not in里面加上条件了,
      

  6.   

    string strsql = "select top "
    + NUMCount + " * from Tb_Info where  Infoid not in ( select top "
    + number + " Infoid from Tb_Info order by Infoid desc )  order by Infoid desc";是不是寫反了: 改成這樣試試:string strsql = "select top "
    number + " * from Tb_Info where  Infoid not in ( select top "
    NUMCount + " Infoid from Tb_Info order by Infoid desc )  order by Infoid desc";
      

  7.   

    前面catid的筛选。Not in里面同样也要有啊- -