我要在销售表中添加一个销售id,类型为char(20),要求是前8位为当日日期即20061030,后四位为0001的递增数字,大家有什么好的解决方法

解决方案 »

  1.   

    ADOQ.SQL.Text := 'select * from djxx where 单号  like ''%' + trim(FormatDateTime('yyyymmdd', NOW)) + '%'' ';    ADOQ.Active := true;    i := ADOQ.RecordCount + 1 + 10000;
        EdDH.Text := trim(FormatDateTime('yyyymmdd', NOW)) + copy(inttostr(i), 2, 4);
      

  2.   

    ADOQ.SQL.Text := 'select * from 表 where 销售ID like ''%' + trim(FormatDateTime('yyyymmdd', NOW)) + '%'' ';    ADOQ.Active := true;    i := ADOQ.RecordCount + 1 + 10000;
        EdDH.Text := trim(FormatDateTime('yyyymmdd', NOW)) + copy(inttostr(i), 2, 4);
      

  3.   

    用SQL的存储过程或函数写好--=============================================
    --用于为新插入的记录生成关键字
    --参数说明: @TabName 要插入的表名
    --         @FieName 要生成关键字的字段名
    --         @PreCode 默认的前缀
    --eg:exec NewTableDataNO 'orderm','single_no','DD'
    --=============================================
    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
      

  4.   

    1.用SQL的用户自定义函数生成编号
    2.将自定义函数绑定到表的字段上即可!
      

  5.   

    实例.生成流水号!并将自定义函数绑定在字段上
    Create Function F_GetBookID()
    Returns Varchar(10)
    As
    Begin
     Declare @S Varchar(10)
     Select @S= 'BK'+Right(100000000+IsNull(Right(Max(BookID),8),0)+1,8) From BOOK
     Return @S 
    End
    GO
    --建立測試環境
    CREATE TABLE BOOK (
     BookID    varchar(10) NOT NULL Default dbo.F_GetBookID(), 
     BookName            varchar(20) NOT NULL,
     Constraint  PK_BOOK_ID Primary key(BookID)
    )
    GO
    --測試
    Insert BOOK(BookName) Select  'aa'
    Insert BOOK(BookName) Select 'bb'
    Insert BOOK(BookName) Select 'cc'Select * From BOOK
    GO
    --刪除測試環境
    Drop Table BOOK
    Drop Function F_GetBookID
    --結果
    /*
    BookID  BookName
    BK00000001 aa
    BK00000002 bb
    BK00000003 cc 
      

  6.   

    Create Function F_GetID(@DateTime VARCHAR(10))Returns Varchar(20)
    As
    Begin
     Declare @IDName Varchar(20)
     Select @IDName = @DateTime+'-'+Right(10000000+IsNull(Right(Max(IDName),7),0)+1,7) From A
     Return @IDName
    End
    GOCREATE TABLE A (
     IDName varchar(20) Primary key Default DBO.F_GetID(CONVERT(VARCHAR,GETDATE(),23)), 
     DVDName  varchar(20) NOT NULl
    )Insert A(DVDName) Select 'aa'
    Insert A(DVDName) Select 'bb'
    Insert A(DVDName) Select 'cc'
    Insert A(DVDName) Select 'dd'
    Insert A(DVDName) Select 'ee'
    Insert A(DVDName) Select 'ff'Select * From A
    GODrop Table A
    Drop Function F_GetID我把liangpei2008(逍遥叹)的代码改了下。。估计能满足你的要求感谢liangpei2008(逍遥叹)的代码
      

  7.   

    Create Function F_GetID(@DateTime VARCHAR(10))Returns Varchar(20)
    As
    Begin
     Declare @IDName Varchar(20)
     Select @IDName = @DateTime+Right(10000+IsNull(Right(Max(IDName),4),0)+1,4) From A
     Return @IDName
    End
    GOCREATE TABLE A (
     IDName varchar(20) Primary key Default DBO.F_GetID(CONVERT(VARCHAR,GETDATE(),12)), 
     DVDName  varchar(20) NOT NULl
    )Insert A(DVDName) Select 'aa'
    Insert A(DVDName) Select 'bb'
    Insert A(DVDName) Select 'cc'
    Insert A(DVDName) Select 'dd'
    Insert A(DVDName) Select 'ee'
    Insert A(DVDName) Select 'ff'Select * From A
    GODrop Table A
    Drop Function F_GetID这个比较满足你的要求..= =~
    感谢liangpei2008(逍遥叹)的代码