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
  • 相关阅读:
    System 类的使用
    StringBuffer 与 StringBuilder类的使用
    String 类 的 使用
    多线程
    音乐播放
    数据库
    表示图编辑
    UITextView(2)
    UITextView
    tarBar
  • 原文地址:https://www.cnblogs.com/wpycs/p/12668384.html
Copyright © 2011-2022 走看看