自动生成编号的存储过程

7 篇文章 0 订阅
1.编写存储过程

存储过程需要先创建再使用
首先需要 create [你的数据库名]
注意把表名和数据库名改的和自己的一样,其他的cv就vans了。

create[你的数据库名]
GO
/****** Object:  StoredProcedure [dbo].[GetBillNo]    Script Date: 04/07/2020 14:57:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--时间:2020-04-07
--功能:获取单据号 @SBIID为单据内码入口参数,@active为活动方式,是获取还是保存 0-预取;1-正式取
--GetBillNo 18,0,''


ALTER              procedure [dbo].[你的表名]
(
	@SBIID INT,
	@action int,
	--单据字符串	
	@BillString nchar(15) outPut
)
AS
		--是否日期
		declare @iDate as int
		--前缀
		declare @Prefix as char(7)
		--日期格式
		declare @dateFormat as varchar(8)
		--序号部分
		declare @serial as int
		
		--当天最大记录数
		declare @dayCount as int
		
		--定义最后修改时间
		declare @dtLastModi as datetime
		
		--定义今天日期
		declare @dtDay  as datetime
		--获取今天日期
		select @dtDay=Convert(datetime,left(getdate(),10))
        --获取是否含日期/日期格式
	    select @iDate=SBNIfDate,@dateFormat=SBNDateFormat from sys_SysBillNo(你的表名,删去我和括号,改成你的表名) where sbiid=@SBIID	

	if @action=1
		begin
			--获取最后修改日期
			
			select @dtLastModi=Convert(datetime,left(SBNLastModified,10)) from sys_SysBillNo(你的表名) where sbiid=@SBIID
			
			--如果今天日期不等于最后修改日期则把累加数清零
			--if @dtDay<>@dtLastModi
			--begin
			--	update sys_SysBillNo(你的表名) set SBNDayCount=0
			--	update sys_sysbillno(你的表名) set SBNLastModified=Getdate()
			--end
		
			 --获取单据号
			begin tran
			update sys_sysbillno(你的表名) set sbndaycount=sbndaycount+1 where sbiid=@sbiid
            select @Prefix=sbnprefix,@dayCount=sbndayCount from sys_SysBillNo(你的表名) where sbiid=@SBIID
			commit			
			--产生获取的单据号
			--
			 if @iDate=0
				set @BillString=@Prefix+right('0000'+rtrim(cast(@dayCount as varchar(4))),4)
			 else
			    BEGIN
					if @dateFormat='YYYY'
						set @BillString=@Prefix+ltrim(CONVERT(char(2), GETDATE(), 12))+right('0000'+rtrim(cast(@dayCount as varchar(4))),4)
					ELSE IF @dateFormat='YYYYMM'
						set @BillString=@Prefix+ltrim(CONVERT(char(4), GETDATE(), 12))+right('0000'+rtrim(cast(@dayCount as varchar(4))),4)
					ELSE IF @dateFormat='YYYYMMDD'
						set @BillString=@Prefix+ltrim(CONVERT(char(6), GETDATE(), 12))+right('0000'+rtrim(cast(@dayCount as varchar(4))),4)
			    END 
			 select @BillString 
    		 return
		end
	else
		--预取单据号
		select @Prefix=sbnprefix from sys_SysBillNo(你的表名) where sbiid=@SBIID		
		if @@ROWCOUNT>0
			BEGIN
			    if @iDate=0
					set @BillString=@Prefix+'0000'
				else
				    BEGIN
						if @dateFormat='YYYY'
							 set @BillString=@Prefix+ltrim(CONVERT(char(2), GETDATE(), 12))+'0000'
						ELSE IF @dateFormat='YYYYMM'
							 set @BillString=@Prefix+ltrim(CONVERT(char(4), GETDATE(), 12))+'0000'
						ELSE IF @dateFormat='YYYYMMDD'
							 set @BillString=@Prefix+ltrim(CONVERT(char(6), GETDATE(), 12))+'0000'
					END 
				select @BillString
				Return
			END
2.建表

在这里插入图片描述

注意SBNIPrefix 这里可供编码的长短由
在这里插入图片描述
决定。自己录的一条数据如下图。
在这里插入图片描述

3.dao层
    /**
     * 自动获取编号
     * @param billType  这里传SBIID的值
     * @param action   这里传0 和 1 
     *  这里传0 和 1 
     * 传0 代表预选 一般用于页面单号还不需要生成的时候,比如新增的时候,不一		定确定,我们就可以传0 。
     * 传1 是真实的单号,一般用于新增确定,单号一定要生成的时候 自己会自增。
     * @return
     */
String findPrestrainCode(@Param("billType") Integer billType, @Param("action") Integer action);

4.mapper
<select id="findPrestrainCode" resultType="String" statementType="CALLABLE">
    EXEC GetBillNo #{billType},#{action},'';
</select>

没什么业务就不走service了

5.Controller

/**

  • 自动获取编号
  • @param billType
  • @param action
  • @return
    */
    @RequestMapping("/getCode")
    @ResponseBody
    String findPrestrainCode(@Param(“billType”) Integer billType, @Param(“action”) Integer action){
    return receivingLiaisonDAO.findPrestrainCode(billType,action);
    }
测试类测试

在这里插入图片描述

测试结果

传0时,
在这里插入图片描述
传1时,
在这里插入图片描述
女神镇
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值