日期:2014-05-17 浏览次数:20650 次
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
--调用存储过程得到自动编号值
declare @v_output varchar(64)
exec [GETAUTONO] 'BONUSSEQ' , @v_output output
select @v_output
/*
--以下是创建表语句
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] [