作一个表,两个字段,Genid (id int,Pdate datetime),只有一条记录;
使用存储过程得到编号,这样就肯定不会重复了。
生成编号的主要语句  update Genid
  set id = right('000'+ rtrim(convert(varchar,isnull((select id from Genid where datediff(dd,Pdate,getdate()) = 0),0) + 1)),4)
  select id //这个就是递增后的编号了。
  from genid

解决方案 »

  1.   

    哦,Update要这样。
    句  update Genid
      set id = right('000'+ rtrim(convert(varchar,isnull((select id from Genid where datediff(dd,Pdate,getdate()) = 0),0) + 1)),4),
      pdate = case when datediff(dd,pdate,getdate()) <> 0 then getdate() else pdate end
      

  2.   

    唉又错,给个完整的测试:
    create table genid
    (id int primary key,
     Pdate datetime
    )
    drop procedure Pgenid
    go
    create procedure PGenid
    as
    begin
      update Genid
      set id = (isnull((select id from Genid where datediff(dd,Pdate,getdate()) = 0),0) + 1),
          pdate = (case when datediff(dd,pdate,getdate()) <> 0 then getdate() else pdate end)
      
      select right('000'+ rtrim(convert(varchar,id)),4) from Genid
    enddrop table genidinsert genid
    values
     (1,'2000-1-1')exec Pgenid存储过程返回的结果集就是流水号,也可以用OUT的参数了,基本方法就是这样了。
      

  3.   

    create table genid
    (id int primary key,
     Pdate datetime
    )
    drop procedure Pgenid
    go
    create procedure PGenid
    as
    begin
      update Genid
      set id = (isnull((select id from Genid where datediff(dd,Pdate,getdate()) = 0),0) + 1),
          pdate = (case when datediff(dd,pdate,getdate()) <> 0 then getdate() else pdate end)
      
      select right('000'+ rtrim(convert(varchar,id)),4) from Genid
    enddrop table genid --->这句放这里干什么?insert genid
    values
     (1,'2000-1-1')exec Pgenid存储过程返回的结果集就是流水号,也可以用OUT的参数了,基本方法就是这样了。
      

  4.   

    呵呵,见笑,那里是测试得时候删除存储过程的,用不到,一下全拷过去了,本来想说明一下得,但是不能连续回三次以上。
    只有两个Create,再加写入一个种子的Insert是有用的。
      

  5.   

    太谢谢lyxinfo()了,给你50分。