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