这样一张表
ID 档案号 
1  H0001 
2  H0002  
3  H0003 
4  H0004 客户要求档案号是可以插入的,即
假如表中现在有了4条记录,档案号如上,现在客户要在档案号为H0003的记录前加一条记录,新加入记录的档案号为H0003,而原来的档案号为H0003记录,它的档案号则变成H0004,以下的记录依此类推,就好像档案号是自动编号一样,这样的修改SQl怎么写阿,有没有好的办法,能让这样的修改速度很快(记录很多)

解决方案 »

  1.   

    插入前判断是否有编号>=输入的编号,有的话执行更改编号 
    WHERE子句: WHERE 编号>= 输入的编号。然后查入记录
    效率低啊
      

  2.   

    原来如此。你想想,若此档案号是primay key,你若这里变化了,其他与他关联的表岂不是都要更新,不然数据不就全乱了!所以要完成如此功能,你可以用id来做主键,当然显示还是要用档案号,你程序可以这样,若客户强行要输入一个以前已占用的档案号,比如现在档案号已经到h345了,他非要再增加一个h112,那你只能这样。倒着来,将最后一个h345替成h346,然后将h344替换成h345,...h112改成h113,然后插入新的h112即可。兄弟没办法的。只有这样了。可以用存储过程实现,这样效率高一些。
      

  3.   

    update Table set 档案号:=档案号+1 
    WHERE  档案号>= 输入的档案号
      

  4.   

    就是 chenquan(嘉威王子) 方法
      

  5.   

    同意这个:
    update Table set 档案号:=档案号+1 
    WHERE  档案号>= 输入的档案号不过……好像84这么写的吧……
    update Table set 档案号=档案号+1 《--没有冒号的,呵呵
    WHERE  档案号>= 输入的档案号
      

  6.   

    你呀如果要这样做的话那你就可以这样实现。
     1。是要按要求做一个UPDATE ,
     2。写入你的那条新记录。(insert into )这样不就可以了吗语句如何做就不要我说了吧。
    OK!
      

  7.   

    这是个简单的问题:
     这种情况下我不会把档案号作为一列来记录分为2列H放一列这列数据在以后可能会增加如I,J,K等不能省。另外序号001,002,之类的我不会直接附在H后的,就用ID 在作前端的时候把这2列取出来加一起作编号,这样你insert的时候想insert哪里都无所谓insert的时候把insertidentity打开(对sql server 2000).就一切OK!