自动生成编号

该博客介绍了两个用于自动生成编号的SQL存储过程。第一个存储过程[Creat_Table_Code]根据指定的表名、日期、起始编码和编码列名,生成新的编号。第二个存储过程[Get_oddNo]则根据输入的类型和日期,生成类似'LH2022051901'这样的编号。这两个过程主要用于自动为订单或类似记录分配唯一编号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE PROCEDURE [Creat_Table_Code]
 @TableName1 varchar(50), --表名
 @DateString varchar(50),--时间:格式090807
 @CodeString varchar(50),--编码开始字符如:PS
 @Column1 varchar(50)--编码的列名
AS
 begin transaction
  declare @sql1 nvarchar(4000)
  declare @CodeNo int
  set @sql1 = 'select @a=isnull(MAX(convert(INT,REPLACE('+@Column1+', '''+@CodeString+@DateString+''',''''))),0)+1  from ' + @TableName1+'  where  ISNUMERIC(REPLACE('+@Column1+', '''+@CodeString+@DateString+''',''''))=1 AND  '+@Column1+' like '''+@CodeString+@DateString+'%'''
  exec sp_executesql @sql1,N'@a int output',@CodeNo output
  if @CodeNo <10
   begin
    select  @CodeString+@DateString+'000'+convert(varchar,@CodeNo)

   end
  else if @CodeNo <100
   begin
    select  @CodeString+@DateString+'00'+convert(varchar,@CodeNo)
   end
  else if @CodeNo <1000
   begin
    select  @CodeString+@DateString+'0'+convert(varchar,@CodeNo)
   end
  ELSE
   begin
    select  @CodeString+@DateString+convert(varchar,@CodeNo)
   end

  
  if(@@error=0 and @@rowcount=1)
       commit transaction
    else
       rollback transaction

 

 

 

--Author: Sum.zheng
--CreateDate:2011-05-19
--Function: 自动生成订车单号(日期加序号编号)
CREATE PROCEDURE Get_oddNo

@type varchar (10),
@time smalldatetime

AS

BEGIN

DECLARE @T_type VARCHAR(10)

DECLARE @T_time VARCHAR(10)

DECLARE @NEW_ID VARCHAR(16)


--取出表中当前日期的已有的最大ID

IF @type = '0'
 BEGIN
  SET @T_type = 'LH'
 END
ELSE IF @type = '1'
 BEGIN
  SET @T_type = 'CK'
 END
ELSE IF @type = '2'
 BEGIN
  SET @T_type = 'WL'
 END
ELSE
 BEGIN
  SET @T_type = 'WL'
 END

set @T_time = right(convert(varchar,@time,112),6)

SET @NEW_ID = NULL
set @NEW_ID = ( SELECT TOP 1 [odd_no] FROM [a_enternote_dv] WHERE [odd_no] LIKE @T_type+@T_time+'%' ORDER BY [odd_no] DESC )
--如果未取出来

IF @NEW_ID IS NULL

--说明还没有当前日期的编号,则直接从1开始编号
BEGIN
SET @NEW_ID = (@T_type+@T_time+'01')

--如果取出来了
END
ELSE

BEGIN

DECLARE @NUM VARCHAR(8)

--取出最大的编号加上1

SET @NUM = CONVERT(VARCHAR, (CONVERT(INT, RIGHT(@NEW_ID, 2)) + 1))

--因为经过类型转换,丢失了高位的0,需要补上

SET @NUM = REPLICATE('0', 2 - LEN(@NUM)) + @NUM

--最后返回日期加编号

SET @NEW_ID =@T_type+ @T_time + @NUM
END
SELECT @NEW_ID as odd_no
END

GO

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值