Sql Server 数据库问题!
大家都知道,开发的软件给用户用的时候,用户要求精简。
比如添加数据时,一般ID都会用 identity(1,1)让自动添加编号,免得用户写起来麻烦!我用的 asp.net中 gridview绑定数据。问题:
现在我添加三条数据进去!OK成功!这时ID=1,ID=2,ID=3。没问题!
接下来我把ID=3这条数据删掉,我再添一条进去。现在ID=4?为什么?高手请给你一个合理的解决方法。如果用户把ID=1这条数据给删了。那么这时候要把ID=2变成3,ID=变成2 这要怎么处理??高手请给一个合理的办法!

解决方案 »

  1.   

    ID不从0开始不影响大局吧,要是非要那样的效果,可以写一个delete的触发器,每次执行完删除操作,把ID整理一下
      

  2.   

    那就 别 自增, 自己插入id值吧,每次 插入,都查询下最大值,插入的id=最大值+1
      

  3.   

    id 自增 不能修改,不会后退,只能向前走,用过的id 自增列不会在用第二次,也不可能用第二次,这是自增的特点, 你如果还想自增而且还想让用户体验效果好点那么就修改前台的显示模式,
      

  4.   

    你可以让前台自动显示行号 可以去看看http://hi.baidu.com/342268154/blog/item/81ea72ef2499782a62d09fb5.html
     希望对你有用
      

  5.   

    既然选择自增ID,说明ID只起到主键的作用。只要能唯一标识行就可以,最终是不需要呈现给用户的。
      

  6.   

    http://blog.csdn.net/fcuandy/archive/2008/12/15/3522876.aspx
    参考FC牛牛的解决办法。
      

  7.   

    现在ID=4?为什么?高手请给你一个合理的解决方法。这是默认的做法,你要重用ID,需要另外的解决方法。
      

  8.   

       ID作为主键标识列,不重复出现第二次是其最重要特征,像楼上所说,其实它的作用是便于你对数据的管理操作,若要作为rowNum展示给用户看,你可以在dataGridview新增一模板列放一个lable之类的控件,通过代码处理实现rowNum 的展示就行,没有必要去和sql的自增列较劲哈。
      

  9.   

    我支持8楼的观点直接在显示的时候生成序号,跟你实际的ID没有关系
    或者你可以用sql语句生成连续序号(并不改变原来的ID)
      

  10.   

    declare from 表名 where id = id  
    这样删除自动列就不会出现那样了!
    它会自动填上去
      

  11.   


    自增问题在上面的基础上这样解决:表换成不自增!就像上面友友说的。在UI层后台,处理。
    在增加之前处理,但是界面不要输入框。
    我是用的多层开发模式,
    传到UI层一个selectCount(),一个selectMax()和一insert()方法返回int
    if(select()==0)
    {
    int id=1;
    insert(id);
    }
    else
    {
    int id=selectMax()+1;
    intset()
    }