自动编号存储过程

if OBJECT_ID('GETAUTONO','P') is not null drop proc GETAUTONO
go
CREATE PROCEDURE [dbo].[GETAUTONO]
@AID VARCHAR(20),
@AUTONO VARCHAR(30) OUTPUT
AS
BEGIN
 DECLARE @ADATE VARCHAR(20),@ALENGTH INT,@ANEXTNO INT,@ALASTDATE VARCHAR(8)
 SELECT @AUTONO=ISNULL(APREFIX,''),@ADATE=ADATE,@ALENGTH=ALENGTH,@ANEXTNO=ANEXTNO,@ALASTDATE=ALASTDATE
  FROM SMAUTO_1 WHERE AID=@AID
 --GET DATEPART
 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 'YYYYMMDD' THEN SUBSTRING(@DATEPART,1,4)+SUBSTRING(@DATEPART,6,2)+RIGHT(@DATEPART,2)
  ELSE ''
 END
 SET @AUTONO=@AUTONO+@DATEPART
 --get next no
 DECLARE @NEXTNO VARCHAR(30)
 IF (@DATEPART='' OR @DATEPART=@ALASTDATE)
 BEGIN
  SET @NEXTNO=CONVERT(VARCHAR(30),@ANEXTNO)
  SET @NEXTNO=REPLICATE('0',@ALENGTH-LEN(@NEXTNO))+@NEXTNO
  UPDATE SMAUTO_1 SET ANEXTNO=ANEXTNO+1 WHERE AID=@AID
 END
 ELSE
 BEGIN
  SET @NEXTNO=REPLICATE('0',@ALENGTH-1)+'1'
  UPDATE SMAUTO_1 SET ANEXTNO=2,ALASTDATE=@DATEPART WHERE AID=@AID
 END
 SET @AUTONO=@AUTONO+@NEXTNO
END
go


--以下是创建表语句
CREATE TABLE [dbo].[SMAUTO_1](
 [AID] [varchar](50) not NULL unique,   --自动编号唯一编码
 [ADESC] [varchar](50) NULL,      --编号描述EN
 [ADESCCHS] [varchar](50) NULL,     --编号描述CH
 [APREFIX] [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,     --锁定时间
PRIMARY KEY CLUSTERED
(
 [VGUID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
--ALENGTH 增加默认值约束
GO
ALTER TABLE [dbo].[SMAUTO_1] ADD  CONSTRAINT [DF_SMAUTO_1_ALENGTH]  DEFAULT ('5') FOR [ALENGTH]
GO
ALTER TABLE [dbo].[SMAUTO_1] ADD  CONSTRAINT [DF_SMAUTO_1_ANEXTNO]  DEFAULT ('1') FOR [ANEXTNO]
GO
ALTER TABLE [dbo].[SMAUTO_1] ADD  CONSTRAINT [DF_SMAUTO_1_VGUID]  DEFAULT (newid()) FOR [VGUID]
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值