zoukankan      html  css  js  c++  java
  • 简易发号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
  • 相关阅读:
    机器学习第二章复习
    机器学习第三章复习
    机器学习第四章复习
    第一次作业
    第二次作业
    第06组 Beta版本演示
    第06组 Beta冲刺(4/4)
    第06组 Beta冲刺(3/4)
    第06组 Beta冲刺(2/4)
    第06组 Beta冲刺(1/4)
  • 原文地址:https://www.cnblogs.com/wpycs/p/12668384.html
Copyright © 2011-2022 走看看