5,889
社区成员
发帖
与我相关
我的任务
分享
CREATE PROCEDURE BILLNO_PROCEDURE
@ISINSERT SMALLINT,@BUSSINESSTYPE VARCHAR(10),@CURRENTDATE VARCHAR(8)
AS
DECLARE @PREFIX VARCHAR(6) --运编前缀
DECLARE @ISDATERELATION SMALLINT --是否要存在日期
DECLARE @DATEFORMATTER VARCHAR(8) --日期格式
DECLARE @MAXLSNO INTEGER --最大流水号
DECLARE @LSNOLENGHT INTEGER --流水号长度
DECLARE @ISEXIST SMALLINT --判断指定格式的编号是否已经存在
DECLARE @LSNO INTEGER --流水号(整型的,如果是001,则只能表示为1)
DECLARE @LENLSNO VARCHAR(6) --流水号(字符串)
DECLARE @BILLNO VARCHAR(20) --最后生成的编号
PRINT @BUSSINESSTYPE
--根据@BUSSINESSTYPE(业务类型)查询到运编号的参数
SELECT @PREFIX=PREFIX,@ISDATERELATION=ISDATERELATION,@DATEFORMATTER=DATEFORMATTER,@LSNOLENGHT=LSNOLENGHT FROM SA.SY_BILLNORULE
WHERE BUSSINESSTYPE=@BUSSINESSTYPE
PRINT @PREFIX
PRINT @ISDATERELATION
PRINT @LSNOLENGHT
PRINT @DATEFORMATTER
SET @MAXLSNO=0
--按照编号长度(@TransIDLENgth)和业务类型(@BUSSINESSTYPE)到运编号表中去查询记录
SELECT @MAXLSNO=ISNULL(MAX(LSNO),0) FROM SA.SY_BILLNOLIST WHERE BUSSINESSTYPE=@BUSSINESSTYPE
PRINT @MAXLSNO
--当@MAXLSNO为0的时候说明没有抓到记录
IF(@MAXLSNO=0)
SET @ISEXIST=0
ELSE
SET @ISEXIST=1
SET @LSNO=@MAXLSNO+1
IF ((@LSNOLENGHT-LEN(@LSNO))=1)
SET @LENLSNO='0'+CONVERT(VARCHAR(6),@LSNO)
ELSE IF ((@LSNOLENGHT-LEN(@LSNO))=2)
SET @LENLSNO='00'+CONVERT(VARCHAR(6),@LSNO)
ELSE IF ((@LSNOLENGHT-LEN(@LSNO))=3)
SET @LENLSNO='000'+CONVERT(VARCHAR(6),@LSNO)
ELSE IF ((@LSNOLENGHT-LEN(@LSNO))=4)
SET @LENLSNO='0000'+CONVERT(VARCHAR(6),@LSNO)
ELSE IF ((@LSNOLENGHT-LEN(@LSNO))=5)
SET @LENLSNO='00000'+CONVERT(VARCHAR(6),@LSNO)
ELSE
SET @LENLSNO=CONVERT(VARCHAR(6),@LSNO)
IF(@ISDATERELATION=1)
SET @BILLNO =@PREFIX+@CURRENTDATE+@LENLSNO
ELSE
SET @BILLNO =@PREFIX+@LENLSNO
IF(@ISINSERT=1)
IF(@ISEXIST=1)
UPDATE SA.SY_BILLNOLIST SET BILLNO=@BILLNO,LSNO=@LENLSNO WHERE BUSSINESSTYPE=@BUSSINESSTYPE
ELSE
INSERT SA.SY_BILLNOLIST (BUSSINESSTYPE,BILLNO,CURRENTDATE,LSNO) VALUES
(@BUSSINESSTYPE,@BILLNO,@CURRENTDATE,@LENLSNO)
SELECT @BILLNO AS BILLNO
END
GO