有个字段是IDENTITY类型,同时也作为另一个条码编号的的来源,例如这个字段的数据是100,条码编号则是00000100,由于条码是给客户使用的,想要避开所有的4,也就是要直接修改IDENTITY中的值,最好是直接修改IDENTITY的编号计数器,请问有什么便捷的做法?IDENTITY字段如何避开4?

解决方案 »

  1.   

    IDENTITY可以更改,可以在插入的时候判断,如果是4,就加一。但是我觉得你可以直接取消IDENTITY,在一个临时表中先用IDENTITY获取,然后处理后插入到目标表中。
      

  2.   


    IDENTITY如何更改?
    若是可以更改的话,我可以预先取出IDENTITY,然后判断,若是带4就跳号,不过不清楚如何修改IDENTITY。条码编号要与这个ID相同,这样写起程序也较简单点,因为扫完条码后处处都可以用这个ID查询
      

  3.   

    DBCC CHECKIDENT(表名,reseed,1)这个是重置IDENTITY,你可以更改那个1,改成你希望接着下去的那个起点。比如DBCC CHECKIDENT(表名,reseed,5),但是这个值要用变量来获取当前的值,不能写死
      

  4.   


    Declare @ID Int
    Declare @BarCode Varchar(16)Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1'))  
    Select @ID
    While(CharIndex('4', Cast(@ID as Varchar(16))) > 0)
    Begin
    DBCC   CHECKIDENT   (Table1,   RESEED,   @ID)
    Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1'))  
    End
    Select @ID
    Set @BarCode = Right('00000000000' + Ltrim(Rtrim(Cast(@ID as Varchar(10)))), 10)没勇气用DBCC这类指令,心里没底,这样可可靠性可以吗?
      

  5.   

    While(CharIndex('4', Cast(@ID as Varchar(16))) > 0) 你这一句会不会查出不是你要的数据啊?比如00000403,这样也会找到的哦。而且你貌似逻辑有点问题,用if来判断就可以了
      

  6.   


    如果你坚持这种方案,就不要用IDENTITY了,4万时执行1万次CHECKIDENT不是闹着玩的,而应自己写序列函数:fn_next_id。
      

  7.   

    就是要去掉所有的4
    因此直接使用charindex
    4W的话也无所谓的,4W跳过之后就到5W了,也就是一次生成会慢点。
    不过多谢提醒,我没必要每次都去修改自动编号,若是遇到带4的,计算出一个不带4之后修改一次就可以了。
      

  8.   


    Declare @ID Int
    Declare @BarCode Varchar(16)Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1'))  
    Select @ID
    If(CharIndex('4', Cast(@ID as Varchar(16))) > 0)
    Begin
    While(CharIndex('4', Cast(@ID as Varchar(16))) > 0)
    Begin
    Set @ID = @ID + 1
    End
    Set @ID = @ID - 1
    DBCC   CHECKIDENT   (Table1,   RESEED,   @ID)
    Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1'))  
    End
    Select @ID
    Set @BarCode = Right('00000000000' + Ltrim(Rtrim(Cast(@ID as Varchar(10)))), 10)
      

  9.   

    那你还不如在插入之前把4替换掉。不过我还是觉得取消IDENTITY会比较好。只要算法保证了自增,那也还是可以不依赖SQLServer提供的特性来实现的。