问题描述:
增加数据编号为XJNY-CP-20130001
增加数据编号为XJNY-CP-20130002
增加数据编号为XJNY-CP-20130003
第一个问题,自动生成编号,按照顺序往下排,这个自动取号代码怎么写?
第二个问题,如果我把其中编号为XJNY-CP-20130002的数据删除掉,那剩下的就为
XJNY-CP-20130001,XJNY-CP-20130003,为了避免出现漏号情况,在后面新增的时候就需要把这个XJNY-CP-20130002给填补上已保证不漏号,这个代码怎么写。就各位大神指教

解决方案 »

  1.   


    --1. 建表
    create table tb(itemNo varchar(20))
    --2. 建个存储过程最流水号
    create proc GetMaxNo @itemNo varchar(20) output
    as
    set nocount on
    declare @maxNo varchar(20),@i int
    set @maxNo='XJNY-CP-'+cast(Year(getdate()) as varchar)
    select @i=isnull(max(right(itemNo,4)),0)+1 from tb where itemNo like @maxNo+'%'
    set @maxNo=@maxNo+right('0000'+cast(@i as varchar),5)set @itemNo=@maxNo
    return 
    go
    3. --新增时调用
    declare @itemNo varchar(20)
    exec GetMaxNo @itemNo output
    insert into tb(itemNo) values(@itemNo)--测试,新增三次结果
    select * from tb
    /*
    XJNY-CP-201300001
    XJNY-CP-201300002
    XJNY-CP-201300003*/
      

  2.   


    --1. 建表
    create table tb(itemNo varchar(20))
    --2. 建个存储过程最流水号
    create proc GetMaxNo @itemNo varchar(20) output
    as
    set nocount on
    declare @maxNo varchar(20),@i int
    set @maxNo='XJNY-CP-'+cast(Year(getdate()) as varchar)
    select @i=isnull(max(right(itemNo,4)),0)+1 from tb where itemNo like @maxNo+'%'
    set @maxNo=@maxNo+right('0000'+cast(@i as varchar),5)set @itemNo=@maxNo
    return 
    go
    3. --新增时调用
    declare @itemNo varchar(20)
    exec GetMaxNo @itemNo output
    insert into tb(itemNo) values(@itemNo)--测试,新增三次结果
    select * from tb
    /*
    XJNY-CP-201300001
    XJNY-CP-201300002
    XJNY-CP-201300003*/象这种计算而产生的编号,建议不要删除,可以把它改为无效,删除了再被回这个编号是可以的,但是它的创建日期和上一条\下一条数据不连惯,会让人误是不是数据受到非法修改?
      

  3.   


    这个是可以取号了 ,但是如果我现在把XJNY-CP-201300002的删除掉 在新增的话他是直接从XJNY-CP-201300004 开始的,把XJNY-CP-201300002漏掉了
      

  4.   

    这种漏掉的编号,你要想补全的话,可以实现,但比较麻烦,每次都需要整个扫描一遍,来看是否缺了,上面说的,通过增加一个字段,标记删除,以后只要找标记了删除的,同时编码最小的那个,就可以了,比如:select min(itemNo)
    from tb
    where 新增的删除标记字段 = 1这个就是你需要的编码,修改一下存储过程,先看有没有已做了删除标记的记录,如果有,就用这个编码,
    如果没有,那么就用上面的存储过程的逻辑,创建一个新的编码。