我想从数据库中取出第10条和第20条之间的10条记录(这里说的第10条和第20条指的不是id序号,而是单纯的记录在数据库中所处的位置),但是由于过去删除记录的原因,这些记录的id序号并不连续,请问这个问题如何才能解决。
    另:除了每次删除时对id进行update,有什么方法可以在删除记录时使得id序号自动变的连续呢

解决方案 »

  1.   

    string s ="Select top 20 * from tb where not exists (select top 10 * from tb);
      

  2.   

    我是新人我想是不是执行string s ="Select top 20 * from tb where not exists (select top 10 * from tb);
    语句后把数据添加到DATASET中就可以取出记录了?
      

  3.   

    对你最后一个问题,你想过没有如果你更改id号的同时正好有个人查询这条记录并修改ing,你提交后他再提交这样会出现问题,当然你可以用锁的机制,但是如果这样的工作频繁的作就不好。不过这个可以由触发器完成,或者你指定一个专门时间,这个时间停止别人访问数据库,而你就重新生成这些id号
      

  4.   

    用fphuang(笨牛@net) 的方法,我做如下修改:
    string str="select top "+Convert.ToString(15+15*index1)+" * from production where not exist(select top "+Convert.ToString(15*index1)+" id from production )";
    OleDbDataAdapter da=new OleDbDataAdapter(str,oleDbConnection1);
    OleDbCommand cmd=da.SelectCommand;
    oleDbConnection1.Open();
    int i=cmd.ExecuteNonQuery();
    Response.Write(i.ToString());
    但结果显示所选择的记录条数为0(在这里index1=1),但我的数据库中存在18条记录,按说应该显示3条记录,大家看看这是为什么
      

  5.   

    第一个存放的位置确实没什么意义,在你的数据库配置、环境设置等影响下每个top20可能是不一样的,一般采取加id列来定义前后然后order一下就行了。
    第二个问题这样确实有稳定方面的隐患,写个触发器让从1开始调用序列(如为ORACLE)或增量种子(如为SQLSERVER)的值并增加。