博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动生成单据号
阅读量:7040 次
发布时间:2019-06-28

本文共 1767 字,大约阅读时间需要 5 分钟。

 --****************
--计算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 @id=@id+1
        update dbo.编号材料销售 with (TABLOCKX) set id=@id
      end
   else if @xh=2
      begin
        select @id=id from dbo.编号设置材料
        set @id=@id+1
        update dbo.编号设置材料 with (TABLOCKX) set id=@id
      end
   else if @xh=3
      begin
        select @id=id from dbo.编号工程结算
        set @id=@id+1
        update dbo.编号工程结算 with (TABLOCKX) set id=@id
      end
  else if @xh=4
      begin
        select @id=id from dbo.编号申请书
        set @id=@id+1
        update dbo.编号申请书 with (TABLOCKX) set id=@id
      end
  else if @xh=5
      begin
        select @id=id from dbo.编号合同书
        set @id=@id+1
        update dbo.编号合同书 with (TABLOCKX) set id=@id
      end
  else if @xh=6
      begin
        select @id=id from dbo.编号工程概算
        set @id=@id+1
        update dbo. 编号工程概算 with (TABLOCKX) set id=@id
      end  
   else if @xh=7
      begin
        select @id=id from dbo.编号采购清单
        set @id=@id+1
        update dbo.编号采购清单 with (TABLOCKX) set id=@id
      end
  else if @xh=8
      begin
        select @id=id from dbo.编号材料入库
        set @id=@id+1
        update dbo.编号材料入库 with (TABLOCKX) set id=@id
      end
  else if @xh=9
      begin
        select @id=id from dbo.编号零售材料
        set @id=@id+1
        update dbo.编号零售材料 with (TABLOCKX) set id=@id
      end
  else if @xh=10
      begin
        select @id=id from dbo. 编号升溢损耗
        set @id=@id+1
        update dbo.编号升溢损耗 with (TABLOCKX) set id=@id
      end
  else if @xh=11
      begin
        select @id=id from dbo.编号零星维修
        set @id=@id+1
        update dbo.编号零星维修 with (TABLOCKX) set id=@id
      end  
 COMMIT TRANSACTION
GO

转载地址:http://uyxal.baihongyu.com/

你可能感兴趣的文章
Hyper-V Server存储介绍
查看>>
[图示]神相的‘敏捷项目管理’
查看>>
更换云服务器上的Python版本
查看>>
Skype for Business Server 2015-04-前端服务器-7-部署
查看>>
你的Postfix邮件服务器安全么?
查看>>
站在巨人肩膀看清IT馅饼和陷阱
查看>>
Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(4)
查看>>
Windows 7 的一些使用技巧
查看>>
Spring Boot中使用Redis数据库
查看>>
完整性检查工具Nabou
查看>>
Exchange企业实战技巧(26)在Outlook中打开多个邮箱
查看>>
一个Linux小型综合实验
查看>>
软件定义架构让超融合世界更加复杂
查看>>
Wi-Fi当前的趋势及对IT和物联网的影响
查看>>
服务器遭受攻击后 该如何有效地处理?
查看>>
未来 Web 设计的 7 大趋势
查看>>
赛门铁克推生物特征识别科技 告别密码
查看>>
原来CSS这样写是会让App崩溃的
查看>>
《Cocos2D权威指南》——第2章 你的第一款iPhone游戏—垂直射击游戏 2.1 准备工作...
查看>>
信息化技术让智慧城市感知增强
查看>>