写个存储过程自动生成新的ID
declare @date    varchar(10),
        @oldid   varchar(50),
        @newid   varchar(50),
        @ii      int
select @date = convert(varchar(10),getdate(),120)
select @oldid = max(yourfield)
  from yourtable
 where yourfield like '%'+@date+'%'
if (@oldid is null)
  select @oldid = 'rk-'+@date+'0000'
select @ii = convert(int,right(@oldid,4))
select @ii = 10001+@ii
select @newid = left(@oldid,len(@oldid)-4)+right(str(@ii,5),4)

解决方案 »

  1.   

    上面错了一句
      select @oldid = 'rk-'+@date+'-0000'
      

  2.   

    上面错了一句
      select @oldid = 'rk-'+@date+'-0000'
      

  3.   

    楼上qybao(阿宝) 的方法可能存在重号的问题,即:如果两个连接同时执行这个操作,那么可能会取出相同的编号。我觉得可以将编号放在一个表中,结构可以如下:
     日期 编号
    然后在上述函数中从这个表中取编号,并且维护表中的编号。
      

  4.   

    楼上qybao(阿宝) 的程序中用事务,在SElect 后锁表 with HOLDLOCK.并且最好在存储过程中做Insert,而在提交时用UPdate