在添加产品编号时:要求编号自动产生。格式为:字母+日期+序号。且时间不同则序号不同。列如:PH07061101,PH07061102
              PH07061201
              PH07061301
不知道如何判断日期的不同,没有思路,请大家指教,谢谢~!

解决方案 »

  1.   

    给一个给你参考一下
    --=============================================
    --过程用于为新插入的记录生成编号
    --参数说明: @TabName 要插入的表名
    --         @FieName 要生成关键字的字段名
    --         @PreCode 默认的前缀
    --eg:exec NewTableDataNO 'orderm','single_no','AA'
    --=============================================
    CREATE PROCEDURE [NewTableDataNO] 
      @TableName varchar(50), 
      @FieldName varchar(50), 
      @PreCode varchar(2)
    ASDeclare  @TmpPreCode varchar(100),@Sql varchar(1000), @NewNo varchar(50), @I varchar(50)if not exists(select * from tempdb.dbo.sysobjects where Name = '##TmpNewNo')
      Create table ##TmpNewNo(RandF float, NewNo varchar(50))Set @TmpPreCode = @PreCode--找当天的最大编号
    select @TmpPreCode = @TmpPreCode + CONVERT(char(6), Getdate(), 12), @I = cast(RAND() as varchar(50))
    set @sql = 'insert ##TmpNewNo(RandF, NewNo) 
                  select ' + @I + ', isnull(max(' + @FieldName + '), '''')'
                    + ' from ' + @TableName 
                    + ' Where left(' + @FieldName + ', len(''' + @TmpPreCode + ''')) = ''' + @TmpPreCode + ''''
    exec(@Sql)
    select @NewNo = NewNo from ##TmpNewNo where RandF = @I
    delete from ##TmpNewNo where RandF = @I--生成新的编号
    if @NewNo = '' set @I = '000' else Set @I = right(@NewNo, 3)set @I = cast(cast(@I as int) + 1 as varchar(3))
    set @I = case len(@I) when 0 then '001' when 1 then '00' + @I when 2 then '0' + @I else @I endselect @TmpPreCode + @I
    GO
      

  2.   

    dxchenchuan,你的方法是这样,做一张表,里面有日期,序号,编号。取系统日期,判断是当天日期则序号加1,否则序号置1,编号:=日期+序号。好象还少了点什么,感觉不对。请详细说明好吗?
      

  3.   

    CREATE PROCEDURE Pro_GetSysBH 
       @BH varchar(12) output,---编号输出
       @TableName  Varchar(30),---一个关键字
       @UpdateBH Bit
     AS
    declare @Year Int,
                 @Month int,
                 @Day int,
                 @Today DateTime,
                 @TbTime DateTime,
                 @SysBH Int,
                 @TmpBH VarChar(10)
     begin
       select @Today=GetDate()
       select @TbTime=SysTime,@SysBH=BH from SysBH where TableName=@TableName
       if DateDiff(Day,@Today,@TbTime)<0--往日日期判断
      begin
          update SysBH set BH=1,SysTime=GetDate() where TableName=@TableName
          Set @SysBH=1
      end
      else if DateDiff(day,@Today,@TbTime)>0--日期大于当前
      begin
          Set @BH='-1'---------------返回错误代码
          Return
      end
      select @Year=Year(@ToDay),@Month=Month(@Today),@Day=Day(@Today)
      select @TmpBH=Right(Str(@Year,4,0),2)+(Select Case when @Month>=10 then Str(@Month,2,0)
       when @Month<10 then '0'+Str(@Month,1,0)
    end)+
            (Select Case When @Day>=10 then Str(@Day,2,0)
                                                                         When @Day<10 then '0'+Str(@Day,1,0)
                                                     end)
     
       if @SysBH<10 select @TmpBH= @TmpBH+'00'+Str(@SysBH,1,0)
       else if @SysBH<100 Select @TmpBH=@TmpBH+'0'+str(@SysBH,2,0)
       else select @TmpBH=@TmpBH+str(@SysBH,Len(@SysBH),0)
      
       if @UpdateBH=1
           update SysBH set BH=BH+1,SysTime=GetDate() where TableName=@TableName  select @BH=@TmpBH
      return end
    GO
      

  4.   

    在编号字段绑定一个UDF即可!
    UDF专门生成编号 ~