• MSSQL 高并发下生成连续不重复的订单号


    参考:

    https://www.cnblogs.com/h-change/p/6699683.html

     这里在数据库层面生成的,经测试确实不会重复。

    附上自己修改后的版本,这里也可以预先生成一年的记录,过程就可以直接去读取。认为表里是一定有数据的。

    --表结 rq date num int 记录每一天生成了多个单号 用于生成流水的
    
    GO
    CREATE PROC dbo.proc_CreateNewDH
    AS 
        SET NOCOUNT ON
        DECLARE
            @TranCount INT=0,
            @Error INT=0,
            @MaxNum INT=0,
            @ErrorMsg VARCHAR(MAX),
            @rq DATE=CONVERT(VARCHAR(10), GETDATE(), 121)    
        BEGIN TRY
        
        BEGIN TRAN
            SET @TranCount=1
            
            SELECT @MaxNum=Num+1
            FROM dhlist WITH(ROWLOCK, UPDLOCK)  --索引当前行不让其他人编辑
            WHERE rq=@rq
            SET @MaxNum=ISNULL(@MaxNum,0)    
            IF @MaxNum=0
            BEGIN
                INSERT INTO dbo.dhlist (rq,Num) VALUES(@rq, 1)
                SET @MaxNum=1
            END
            ELSE
                UPDATE dhlist  SET Num=Num+1 WHERE rq=@rq        
        END TRY
        BEGIN CATCH 
        
            SET @Error=@@ERROR
            SET @ErrorMsg=ERROR_MESSAGE()
            IF @TranCount=1
            BEGIN            
                ROLLBACK TRAN    
                --PRINT 'ROLLBACK TRAN'
                --PRINT @Error
                --PRINT @TranCount
            END
            RAISERROR(@ErrorMsg, 19, 1)     WITH LOG
            RETURN
        END CATCH    
            
        IF @TranCount=1 AND @Error=0
            COMMIT TRAN
            
        IF LEN(CAST(@MaxNum AS VARCHAR))<=4
            SELECT 'XXX'+CONVERT(VARCHAR,GETDATE(),12)+RIGHT('0000'+CAST(@MaxNum AS VARCHAR), 4) AS dh
        ELSE
            SELECT 'XXXX'+CONVERT(VARCHAR,GETDATE(),12)+RIGHT('000000'+CAST(@MaxNum AS VARCHAR), 6) AS dh
    
        SET NOCOUNT OFF
    GO
  • 相关阅读:
    python协程爬取某网站的老赖数据
    python异步回调顺序?是否加锁?
    go语言循环变量
    使用memory_profiler异常
    安装python性能检测工具line_profiler
    等我!
    pytorch代码跟着写
    Python异常类型总结
    Python项目代码阅读【不断更新】
    夏令营体会
  • 原文地址:https://www.cnblogs.com/BTag/p/12674858.html
Copyright © 2020-2023  润新知