简易发号SQL,可用于生成指定前缀自增序列--改进版
使用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

浙公网安备 33010602011771号