在ASP页面自动生成带有日期和数字的序列号

liyan9944010 2013-10-08 01:57:40
请问怎样才能在ASP页面自动生成带有日期和数字的序列号
例如:S20131008001
S20131008002
随日期不同,又会在001开始
我是用SQL 2003
...全文
262 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cloud_Hero 2013-10-09
  • 打赏
  • 举报
回复
用排名函数可以实现 http://jimshu.blog.51cto.com/3171847/1176067 可以参考这篇文章的例子
Landa_Jimmy 2013-10-08
  • 打赏
  • 举报
回复

给你一个存储过程:
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.测试结果
S20131008001

S20131009001
zbdzjx 2013-10-08
  • 打赏
  • 举报
回复
这个序列号,通常是在保存时才生成的。如果提前就生成了,那在多个人同时进行操作时,会重号的。 生成方式可以用数据库来生成或是由程序来生成。 先生成一个字符串“S+年月日”,今天就是S20131008,再在表中查询“select max(序列号) 序列号 from 表 where 序列号 like 'S20131008%'”,看有没有查询到结果,如果没查到,就用S20131008001,如果查到,就取右边三位,转换成数字再+1,再转换成三位字符串,再和S20131008连到一起。
liyan9944010 2013-10-08
  • 打赏
  • 举报
回复
引用 3 楼 hdhai9451 的回复:
哪里有sql2003? 这种单号是不需要手工输入,系统生成的。在数据库里做处理就可以了
写错了,是2000。
Andy__Huang 2013-10-08
  • 打赏
  • 举报
回复
哪里有sql2003? 这种单号是不需要手工输入,系统生成的。在数据库里做处理就可以了
發糞塗牆 2013-10-08
  • 打赏
  • 举报
回复
用sql来生成再获取吧,asp不熟悉
--小F-- 2013-10-08
  • 打赏
  • 举报
回复
首先是没有SQL 2003的。然后在ASP里面生成流水号的办法请到ASP版问问。 如果是数据库的话 就比较简单了 写一个存储过程就解决了。 存储过程可以在程序端进行调用。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧