生成单据编号的存储过程

USE [crm2]
GO
/****** Object: StoredProcedure [dbo].[GetBillsID] Script Date: 09/22/2018 15:13:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Batch submitted through debugger: SQLQuery1.sql|0|0|C:\Users\admin\AppData\Local\Temp\~vsC414.sql
ALTER PROCEDURE [dbo].[GetBillsID]
(@Billsmode INT=0,
@BillsType VARCHAR(30),
@DateType varchar(30),
@GetId int
)

AS
BEGIN
-- routine body goes here, e.g.
-- SELECT ‘Navicat for SQL Server‘
if (@billsmode=0)
BEGIN
if (exists(select ( BillsID.DateCount) from BillsID where [email protected] and [email protected]))
BEGIN
select @GetId=BillsID.DateCount from BillsID where [email protected] and [email protected]
set @[email protected]+1
select @BillsType+‘-‘+CONVERT(varchar(100),@DateType ,23)+‘-‘+replace(right(str(@GetId),4),‘ ‘,‘0‘)
update dbo.BillsID with (TABLOCKX) set [email protected] where ([email protected] and [email protected])
end
else
begin
set @[email protected]+1
select @BillsType+‘-‘+CONVERT(varchar(100),@DateType ,23)+‘-‘+replace(right(str(@GetId),4),‘ ‘,‘0‘)
INSERT INTO dbo.BillsID with (TABLOCKX) (BillsType,DateType,DateCount) VALUES (@BillsType,@DateType,@GetId)
end
END
if (@billsmode=1)
BEGIN
if (exists(select ( BillsID.MonthCount) from BillsID where [email protected] and MonthType=left(convert(varchar,@DateType,21),7)))
BEGIN
select @GetId=BillsID.MonthCount from BillsID where [email protected] and MonthType=left(convert(varchar,@DateType,21),7)
set @[email protected]+1
select @BillsType+‘-‘+left(convert(varchar,@DateType,21),7)+‘-‘+replace(right(str(@GetId),6),‘ ‘,‘0‘)
update dbo.BillsID with (TABLOCKX) set [email protected] where ([email protected] and MonthType=left(convert(varchar,@DateType,21),7))
end
else
begin
set @[email protected]+1
select @BillsType+‘-‘+left(convert(varchar,@DateType,21),7)+‘-‘+replace(right(str(@GetId),6),‘ ‘,‘0‘)
INSERT INTO dbo.BillsID with (TABLOCKX) (BillsType,MonthType,MonthCount) VALUES (@BillsType,left(convert(varchar,@DateType,21),7),@GetId)
end
end

if (@billsmode=2)
BEGIN
if (exists(select ( BillsID.YearCount) from BillsID where [email protected] and YearType=left(convert(varchar,@DateType,21),4)))
BEGIN
select @GetId=BillsID.YearCount from BillsID where [email protected] and YearType=left(convert(varchar,@DateType,21),4)
set @[email protected]+1
select @BillsType+‘-‘+left(convert(varchar,@DateType,21),4)+‘-‘+replace(right(str(@GetId),8),‘ ‘,‘0‘)
update dbo.BillsID with (TABLOCKX) set [email protected] where ([email protected] and YearType=left(convert(varchar,@DateType,21),4))
end
else
begin
set @[email protected]+1
select @BillsType+‘-‘+left(convert(varchar,@DateType,21),4)+‘-‘+replace(right(str(@GetId),8),‘ ‘,‘0‘)
INSERT INTO dbo.BillsID with (TABLOCKX) (BillsType,YearType,YearCount) VALUES (@BillsType,left(convert(varchar,@DateType,21),4),@GetId)
end
end
END

原文地址:https://www.cnblogs.com/Thenext/p/9690618.html

时间: 2024-08-06 15:56:23

生成单据编号的存储过程的相关文章

自动生成单据编号(转)

专门设计一个数据表用于存放管理软件中各种单据的最新的单据编号.编写一个存储过程用于自动生成单据编号. --****************--计算id --使用//表级排它锁//防止用户同时修改该记录--****************CREATE PROCEDURE GetId@xh integer,@id integer outAS /*如果想在连接一中锁住整个表,不允许其他事务更新表中任何记录,但可以读取记录,可使用HOLDLOCK选项,即(HOLDLOCK   等同于   SERIALI

按规则自动生成单据编号 以及并发问题

描述:每种单据新建时,自动生成它的单据编号. 规则如:固定码+日期+流水号 (ABC1603180001) 方法一:触发器 触发器的缺点是,执行了sql之后才看到编码. 测试:流水号不能超过最大数,否则后面的号码全是0 --有两张表,客户表和项目表,要求:新建项目时自动生成项目编号,每个不同的客户的项目的编号从1开始 --项目编号格式为PJ+"-"+"客户编号"+"-"+"日期"+"-"+"流水号

SqlServer按时间自动生成生成单据编号

SET @_tmpDateTime = GETDATE() EXEC dbo.Dtw_Common_GenerateProofCode @ProofType = 'SO',@[email protected], @ProofDate = @_tmpDateTime, @RtnCode = @_tmpProofCode OUTPUT --生成的最终的CODE USE [SZVB]GO/****** Object: StoredProcedure [dbo].[Dtw_Common_Generate

Dynamic CRM 2013学习笔记(四)单据编号及插件批量注册工具

Dynamic CRM 2013学习笔记(一)插件输入实体参数解析 Dynamic CRM 2013学习笔记(二)插件基本用法及调试 Dynamic CRM 2013学习笔记(三)快速创建实体 EntityCreater 基本上每个实体form上都会有单据编号,而且不同的实体编号要求还不太一样,这时就需要一个通用的单据编号插件,可配置以应对不同的需求. 下面简单介绍下实现步骤: 1. 创建二个实体,以保存各实体所要求的不同单据规则及当前流水号 2. 为不同的实体配置各自的单据规则 3. 编写及注

CRM 2013 生成自动编号

1. 建立二个实体: 单据规则: 用于创建单据的规则 规则流水号: 用于记录当前的流水号   2. 创建规则: 创建一条相关的记录后,就会显示对应的流水号:   最终效果: CRM 2013 生成自动编号

将表里的数据批量生成INSERT语句的存储过程 继续增强版

文章继续 桦仔兄的文章 将表里的数据批量生成INSERT语句的存储过程 增强版 继续增强... 本来打算将该内容回复于桦仔兄的文章的下面的,但是不知为何博客园就是不让提交!.... 所以在这里贴出来吧,算作继续增加文章中解决的:根据查询条件自动生成插入脚本的需求,其实这种需求还是蛮常见的. 本文着重解决了文中的脚本的schema问题,给调整了下,现在脚本能自动识别出不同的schema下同名的表的语句 修改后脚本如下: -- Author: <桦仔> -- Blog: <http://ww

.Net常用技巧_生成物料编号(根据分类代码生成)

这个是自己用的,不一定符合您的需求. using System; using System.Collections.Generic; using System.Text; using EXDataControl; using System.Data; using System.Data.SqlClient; using Utility; namespace MyTool { public class CreateMaterialCode { /// <summary> /// 获取新物料编号(

.Net常用技巧_生成单据号

自己用的,没整理,代码比较乱,请不要学我. using System; using System.Collections.Generic; using System.Text; using EXDataControl; using System.Data; using System.Data.SqlClient; using Utility; namespace MyTool { public class CreateDocNo { /// <summary> /// 获取单号 /// <

PHP生成唯一编号 36进制不重复编号

PHP实现生成唯一编号,文中使用10进制转换36进制得到不重复的6000多万个唯一编号,编号位数为10位. 当要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号.短网址等等,我们可以使用36进制计算出符合位数的不重复的编号.我们将0-Z(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)分别代表数值0-35,如字母Z代表35.这样的话我要得到一个5位的编号,最大信息量就是36的5次方了,36^5 = 60466176,即最大的