自动生成单据编号(转)

专门设计一个数据表用于存放管理软件中各种单据的最新的单据编号。编写一个存储过程用于自动生成单据编号。

--****************
--计算id

--使用//表级排它锁//防止用户同时修改该记录
--****************
CREATE PROCEDURE GetId
@xh integer,
@id integer out
AS 
/*
如果想在连接一中锁住整个表,不允许其他事务更新表中任何记录,但可以读取记录,可使用HOLDLOCK选项,即(HOLDLOCK   等同于   SERIALIZABLE)

sql server 对并发的处理由它本身的锁控制,貌似并发,其实有等待排队的现象,只不过时间间隔短,所以并发数很多的时候,还是得进行人工锁设计

在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为-发级别较低,所以应只在必要时才使用该选项。

如果想在连接中锁住整个表,不允许其他事务更新表中任何记录甚至读取表中任何记录,可使用TABLOCKX选项,

如果想在连接中不锁定表,允许其他事务更新表中任何行,使用NOLOCK选项

*/
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 
    if @xh=1 
      begin
        select @id=id from dbo. 编号材料销售
        set @[email protected]+1
        update dbo.编号材料销售 with (TABLOCKX) set [email protected]
      end
   else if @xh=2
      begin
        select @id=id from dbo.编号设置材料
        set @[email protected]+1
        update dbo.编号设置材料 with (TABLOCKX) set [email protected]
      end
   else if @xh=3
      begin
        select @id=id from dbo.编号工程结算
        set @[email protected]+1
        update dbo.编号工程结算 with (TABLOCKX) set [email protected]
      end
  else if @xh=4
      begin
        select @id=id from dbo.编号申请书
        set @[email protected]+1
        update dbo.编号申请书 with (TABLOCKX) set [email protected]
      end
  else if @xh=5
      begin
        select @id=id from dbo.编号合同书
        set @[email protected]+1
        update dbo.编号合同书 with (TABLOCKX) set [email protected]
      end
  else if @xh=6
      begin
        select @id=id from dbo.编号工程概算
        set @[email protected]+1
        update dbo. 编号工程概算 with (TABLOCKX) set [email protected]
      end   
   else if @xh=7
      begin
        select @id=id from dbo.编号采购清单
        set @[email protected]+1
        update dbo.编号采购清单 with (TABLOCKX) set [email protected]
      end
  else if @xh=8
      begin
        select @id=id from dbo.编号材料入库
        set @[email protected]+1
        update dbo.编号材料入库 with (TABLOCKX) set [email protected]
      end
  else if @xh=9
      begin
        select @id=id from dbo.编号零售材料
        set @[email protected]+1
        update dbo.编号零售材料 with (TABLOCKX) set [email protected]
      end
  else if @xh=10
      begin
        select @id=id from dbo. 编号升溢损耗
        set @[email protected]+1
        update dbo.编号升溢损耗 with (TABLOCKX) set [email protected]
      end
  else if @xh=11
      begin
        select @id=id from dbo.编号零星维修
        set @[email protected]+1
        update dbo.编号零星维修 with (TABLOCKX) set [email protected]
      end

COMMIT TRANSACTION

GO

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

时间: 2024-10-12 19:14:30

自动生成单据编号(转)的相关文章

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

描述:每种单据新建时,自动生成它的单据编号. 规则如:固定码+日期+流水号 (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

GZFramwork数据库层《二》单据表增删改查(自动生成单据号码)

运行效果: 使用代码生成器(GZCodeGenerate)生成tb_EmpLeave的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCodeGenerate/ 生成方式见上一节: GZFramwork数据库层<一>普通表增删改查     新增一个自定义控件:ucTableUnitDocNo   后台代码同上一节ucTableUnit除了实例化bllBusiness不一样外其他都一样(红色背景标注) using System; using

生成单据编号的存储过程

USE [crm2]GO/****** Object: StoredProcedure [dbo].[GetBillsID] Script Date: 09/22/2018 15:13:35 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- Batch submitted through debugger: SQLQuery1.sql|0|0|C:\Users\admin\AppData\Local\Temp\~vsC414.sqlAL

mysql 自动生成编号函数

根据需求,保存表数据时需要自动生成一个编号,格式如:AA-2020-03-31-0001  (AA-yyyy-MM-dd-序号).数据库用的mysql,所以创建一个mysql函数. 1.建表: create table sys_sequence_number(sequenceType varchar(30) not null,val int not null,len int not null); 2.建函数 DELIMITER $$DROP FUNCTION IF EXISTS getSeque

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

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

框架-页面获取自动生成编号

页面获取自动生成编号方法        List<DataParam> parpams = new List<DataParam>();        parpams.Add(new DataParam("Code", "KT"));        parpams.Add(new DataParam("Count", "1"));        DbService.Instance().ExecuteF

PHP版本的自动生成有规则的订单号(或编号)

<?php /** * PHP版本的自动生成有规则的订单号(或编号) * 生成的格式是: 20130103000001 前面几位为当前的日期,后面6位为系统自增长类型的编号 * 原理:  * 1.获取当前日期格式化值; * 2.读取文件,上次编号的值+1最为当前此次编号的值(记录以文件的形式存储) * (下月会接着这个编号) */ class FileEveryDaySerialNumber { private $filename; //文件名  private $separate; //系统分

Word章 节标题自动编号并由此自动生成目录 -- 含视频教程(1)

1. 写论文之前事先调好 写论文的时候,难免要用到章节,如何实现下图的效果呢? 其实结合用好两个功能就行了: >> 视频教程链接:B站,速度快,清晰 事先调好,可以给后续工作带来很多便利,但假如你论文已经写完了,才看到这篇文章,又该如何调整呢?请看下边讲述. 2. 论文写好之后才调整 1.如果,此时你的论文已经写好了,章节编号都是手动输入的,不是自动生成的.如图: 2.按照"1"中视频教的方法,把多级编号链接到对应的标题后,那么你会得到如图所示的结果: 一共有自动编号 +