使用merge语法实现新增or更新

首先创建表

CREATE TABLE Test.dbo.Increments (
Prefix varchar(50) NOT NULL,
[MaxNum ] bigint NOT NULL,
CONSTRAINT PK_Increments_Prefix PRIMARY KEY CLUSTERED (Prefix)
)
GO --此处采用聚集索引主要考虑到大部分操作都是主键查找,叶子节点是数据的情况下会省1次IO  

 

存储过程

CREATE PROCEDURE dbo.SP_Seed_New
@Prefix [nvarchar](32),
@Qty [int] = 1
AS
BEGIN TRANSACTION
MERGE
INTO Increments WITH(HOLDLOCK) AS T --事务结束释放,如果没有这个锁高并发情况下会存在主键冲突异常
USING (SELECT
@Prefix AS Prefix
,@Qty AS Qty) AS S
ON t.Prefix = S.Prefix
WHEN MATCHED --匹配时更新
THEN UPDATE
SET T.MaxNum = T.MaxNum + s.Qty
WHEN NOT MATCHED --不匹配时新增
THEN INSERT (Prefix, MaxNum)
VALUES (s.Prefix, s.Qty)
OUTPUT INSERTED.MaxNum AS MaxNum; --输出更新后的数字
COMMIT
GO

最新文章

  1. kali linux之窥看女神上网隐私(ettercap+wireshark+zenmap +dsniff)
  2. 还原网站上压缩的js代码
  3. SCCM 2012 R2安装部署过程和问题(二)
  4. Linux最常用命令的小总结
  5. 【转】中间代码opcode的执行
  6. mongostat 3.2指标详解
  7. 跨域请求之JSONP 二
  8. 深入了解mysql它BDB系列(1)---BDB基础知识
  9. 【译】Objectively Speaking 2: A Crash Course in Objective-C for iOS 6
  10. Javascript面对对象. 第四篇
  11. 深度拾遗(06) - 1X1卷积/global average pooling
  12. Bootstrap3 栅格系统-嵌套列
  13. MyBatis源码解析(八)——Type类型模块之TypeAliasRegistry(类型别名注册器)
  14. 自动排版工具——XML自动排版生成工具
  15. mysql 获取一张表中, 另一张表不存在的数据
  16. 关于elk中filebeat定义好日志输出,但是redis里面却没有输出内容的问题
  17. linux 命令收集 阿里云nginx升级等 查看磁盘空间 版本等
  18. shell中的逻辑判断while
  19. MySQL 数据 导入到 SQL Service
  20. 用LinkedList

热门文章

  1. Spring中IOC的理解
  2. Three 之 Animation 初印象
  3. redis在微服务领域的贡献
  4. 内网渗透DC-5靶场通关
  5. 【UE4】Windows 的几种打包方式
  6. 力扣 - 剑指 Offer 53 - II. 0~n-1中缺失的数字
  7. relativeLayout相对布局的嵌套在py中的引用
  8. UltraSoft - Alpha - Postmortem 事后分析
  9. [no code][scrum meeting] Beta 3
  10. BUAA软件工程个人项目作业