你这样处理我是不怎么赞成。不过语句倒是好写:
update user 
set usercode = right(cast(100000+cast(usercode as int)-1 as varchar),5) 
where usercode > '00003'

解决方案 »

  1.   

    请问大侠icevi(按钮工厂) :你为何不赞成这种处理方式呢,有更好的办法吗?
      

  2.   

    sky_blue(老衲)为什么划不来呀?有更好的办法吗?
      

  3.   

    其实还不如用identity,其他的要求可以通过查询变换等手段来实现你需要的结果
      

  4.   

    sky_blue(老衲) 说得很对,就是划不来。
    何必一定要全部顺号呢?相关所有的表,所有的记录都要更新,如果记录很多效率很差的。而且你更新的一般都是主键,记录锁定上的开销也不小。有些单位喜欢把职员按一定的顺序来排(一般按职位高低来排,呵呵中国人的习惯),如果你想让职员有一定的顺序,那我建议你不要用这个主键来做,另外增加一个字段为forder,这个字段从1开始顺号,删除掉某个人时,只更新这个字段就行了,不需要更新主键。这样开销小很多。考虑一下。
      

  5.   

    这样不会出现两条'00003'?
    楼上的方法很好,也是我常用的,这里还有一种可以参考:
    ---delete user where usercode=’00003’
    update user 
    set usercode = replicate(‘0’,5-len(usercode-1))+convert(varchar(10),(usercode-1))
    where usercode > '00003'
      

  6.   

    你的usercode 字段实际意义是什么?你说说看,为什么要连续才行?
    要删除多条数据怎么办?
      

  7.   

    MY GOD ,没听说图书的登记号能经常变的。 如果书上贴了号码,难道还撕下来重新贴不成?
      

  8.   

    完全没有必要的嘛.
    我认为没有意思.
    SQL 以上都说了,但是如果数据量大的话,考虑一下系统开销!
      

  9.   

    icevi(按钮工厂):在这里登记号是作为资料记录的唯一标识的,你所说的是书号,这个在我的数据表中是有的,不过我想如果将登记号作为int类型的数据是不是要合理一些?
      

  10.   

    强烈推荐identity 呵呵,既然是登记号就是你说了算,用户才不关心登记号呢。
      

  11.   

    谢谢各位大侠先,关于标识列,当然首当其冲的,但数据库设计者却将一个主键定义为varchar,这让我很郁闷!
    分是怎么给的呀?