请问怎样才能在ASP页面自动生成带有日期和数字的序列号
例如:S20131008001
S20131008002
随日期不同,又会在001开始
我是用SQL 2003aspsql

解决方案 »

  1.   

    首先是没有SQL 2003的。然后在ASP里面生成流水号的办法请到ASP版问问。如果是数据库的话 就比较简单了 写一个存储过程就解决了。存储过程可以在程序端进行调用。
      

  2.   

    用sql来生成再获取吧,asp不熟悉
      

  3.   

    哪里有sql2003?这种单号是不需要手工输入,系统生成的。在数据库里做处理就可以了
      

  4.   

    这个序列号,通常是在保存时才生成的。如果提前就生成了,那在多个人同时进行操作时,会重号的。
    生成方式可以用数据库来生成或是由程序来生成。
    先生成一个字符串“S+年月日”,今天就是S20131008,再在表中查询“select max(序列号) 序列号 from 表 where 序列号 like 'S20131008%'”,看有没有查询到结果,如果没查到,就用S20131008001,如果查到,就取右边三位,转换成数字再+1,再转换成三位字符串,再和S20131008连到一起。
      

  5.   


    给你一个存储过程:
    1.首先创建一张表:
    CREATE TABLE [dbo].[Saas_SMAUTO_1](
    [AID] [varchar](50) NOT NULL,
    [ADESC] [varchar](50) NULL,
    [ADESCCHS] [varchar](50) NULL,
    [ShortCode] [varchar](50) NULL,
    [ADATE] [varchar](50) NULL,
    [ALENGTH] [int] NULL,
    [ANEXTNO] [int] NULL,
    [ALASTDATE] [varchar](50) NULL,
    [VGUID] [uniqueidentifier] NOT NULL,
    [VCRTTIME] [datetime] NULL,
    [VCRTUSER] [varchar](50) NULL,
    [VMDTIME] [datetime] NULL,
    [VMDUSER] [varchar](50) NULL,
    [VSTATUS] [varchar](50) NULL,
    [VLOCK] [varchar](50) NULL,
    [VLOCKTIME] [datetime] NULL
    )
    2.创建存储过程:
    create   PROCEDURE [dbo].[SP_Saas_SMAUTO]
    @ShortCode VARCHAR(50), --缩写码
    @AID VARCHAR(20), --自动编号类型
    @AUTONO VARCHAR(30) OUTPUT --输出编号
    AS 
    BEGIN
    DECLARE 
    @ADATE VARCHAR(20), --时间类型
            @ALENGTH INT, --流水号长度
            @ANEXTNO INT, --下一编号
            @ALASTTADE VARCHAR(8)
        
        --如果改公司该类型不存在这种自动编号,系统自动添加这种规则
        IF NOT EXISTS(SELECT 1 FROM Saas_SMAUTO_1 WHERE ShortCode =@ShortCode AND AID =@AID)
        begin
    --动态增加规则
    exec
            (
    'insert into Saas_SMAUTO_1(AID,ShortCode,ADATE,ALENGTH,VGUID,ANEXTNO)
    select '''+@AID+''','''+@ShortCode+''',''YY`YYMMDD'',3,newid(),1'
    )
        end  
        SELECT 
    @AUTONO=ISNULL(AID,''),     --获取AID
            @ADATE=ADATE, --获取日期格式
            @ALENGTH=ALENGTH, --获取流水号长度
            @ANEXTNO=ANEXTNO, --获取下一编号
            @ALASTTADE=ALASTDATE
    FROM Saas_SMAUTO_1
    WHERE 
    AID=@AID 
    and ShortCode=@ShortCode
       --定义时间格式
       DECLARE @DATEPART VARCHAR(10)
       SET @DATEPART=CONVERT(VARCHAR(10),GETDATE(),120)
       SET @DATEPART=CASE @ADATE
                     WHEN 'YYMM' THEN SUBSTRING(@DATEPART,3,2)+SUBSTRING(@DATEPART,6,2)
                     WHEN 'YYYYMM' THEN SUBSTRING(@DATEPART,1,4)+SUBSTRING(@DATEPART,6,2)
                     WHEN 'YY' THEN SUBSTRING(@DATEPART,3,2)
                     WHEN 'YYYY' THEN SUBSTRING(@DATEPART,1,4)
                     WHEN 'YYMMDD' THEN SUBSTRING(@DATEPART,3,2)+SUBSTRING(@DATEPART,6,2)+RIGHT(@DATEPART,2)
                     WHEN 'YY`YYMMDD' THEN SUBSTRING(@DATEPART,1,4)+SUBSTRING(@DATEPART,6,2)+RIGHT(@DATEPART,2)
                ELSE ''
                END
        --AUTONO =前缀+时间格式
        SET @AUTONO=@AUTONO+@DATEPART
        
        DECLARE @NEXTNO VARCHAR(30)
        IF(@DATEPART='' OR @DATEPART=@ALASTTADE)
        BEGIN
    --获取流水号
            SET @NEXTNO=CONVERT(VARCHAR(30),@ANEXTNO)
            SET @NEXTNO=REPLICATE('0',@ALENGTH-LEN(@NEXTNO))+@NEXTNO
            --增加下一编号
            UPDATE Saas_SMAUTO_1 SET ANEXTNO=ANEXTNO+1 
            WHERE 
    AID=@AID
    and ShortCode=@ShortCode
        END
        ELSE
        BEGIN
    --获取流水号
            SET @NEXTNO=REPLICATE('0',@ALENGTH-1)+'1'
            --增加下一编号
            UPDATE Saas_SMAUTO_1 SET ANEXTNO=2,ALASTDATE=@DATEPART 
            WHERE 
    AID=@AID
    and ShortCode=@ShortCode
        END
        SET @AUTONO=@AUTONO+@NEXTNO
    END
    go
    3.调用存储过程
    declare @a varchar(50)
    exec SP_Saas_SMAUTO'','H' ,@a output
    select @a
    4.测试结果
    S20131008001S20131009001
      

  6.   

    用排名函数可以实现
    http://jimshu.blog.51cto.com/3171847/1176067
    可以参考这篇文章的例子