declare @新档案号 char(5)
set @新档案号='H0003'begin tran
  update 表 set 档案号='H'+right('0000'+cast(right(档案号,4)+1 as varchar(4),4) where 档案号>=@新档案号
  insert 表 values(@新档案号,.....)
commit tran

解决方案 »

  1.   

    支持大力的,真够快的
    create procedure InsertDocumentID(@newID varchar(10)) as
    BEGIN
      begin trans
            update DOCTable set DocID='H'+right('0000'+cast(right(档案号,4)+1 as varchar(4),4) where 档案号>=@新档案号
      insert 表 values(@新档案号,.....)
      commit trans
    END
      

  2.   

    create trigger tr_insert table
    for insert
    as 
    if exists( select 档案号 from table where 档案号=inserted.档案号)
      update table set 档案号='H'+cast(right(档案号,4)+1 as varchar(4)) where 档案号>=inserted.档案号 
      

  3.   


    create trigger tr_insert on table 
    for insert 
    as 
    BEGIN
      begin trans
            update table set 档案号='H'+right('0000'+cast(right(档案号,4)+1 as varchar(4),4) where 档案号>=@新档案号
      insert 表 values(@新档案号,.....)
      commit trans
    END
      

  4.   

    OK,大力还有很多其他朋友的方法可行,待会给各位分数,我的程序是这样的,
    表名是资料表,每种资料都有一个档案号,档案号是根据表中记录的数量自动产生,档案号的格式在客户那有规定,比如前缀H什么的,只要资料进库,档案号就确定下来,我程序一开始也是这样设计的,只要记录进库,档案号就不能改动了,但客户提出,如果我输了很多资料进去,忽然发现,前面少了一条资料,而且这条资料只能加在前面,那怎么办?其实我知道这种像各位的处理方法效率不太高,如果有十万条记录,恰好要在第一条记录前插一条记录,那就要修改九万九千九百九十九条记录了,各位有没有别的数据库结构的设计方法??像这样的情况应该怎样设计数据库?才能使插入或者修改,删除(如果我把前面的资料删除,后面资料的档案号也要更改)的效率高