22,209
社区成员
发帖
与我相关
我的任务
分享
给你一个存储过程:
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