程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 並發-sql 按規則生成編號,字母遞增

並發-sql 按規則生成編號,字母遞增

編輯:編程綜合問答
sql 按規則生成編號,字母遞增

生成規則 HFR+Code+Date
這是生成的主鍵編號
HFR-xxx-20150101
HFR-xxx-20150104
HFR-xxx-20150109
HFR-xxx-20150111
HFR-xxx-20150112

當Code和Date重復時就在後面加字母區分
HFR-xxx-20150101
HFR-xxx-20150101A
HFR-xxx-20150101B
HFR-xxx-20150101C
HFR-xxx-20150101D
超過26個字母就這樣
HFR-xxx-20150101Z
HFR-xxx-20150101ZA
.....
HFR-xxx-20150101ZZA
....
HFR-xxx-20150101ZZZA
如果後面是數據就好辦了,但字母就有點難處理了
注意考慮並發情況

最佳回答:


建一個輔助表SubCode(No,Code),內容

    No Code
    -- ----
     0      <-Code為空字符串
     1 A
     2 B
    ...
    26 Z
    27 ZA
    ...

以下為SQL Server的例子

    DECLARE @key varchar(20)
    DECLARE @lastKey varchar(20)
    DECLARE @subCode varchar(4)
    DECLARE @no int

    -- 編號前綴
    SET @key = 'HFR-xxx-20150101'
    -- 求最大編號
    SELECT @lastKey = MAX([key]) FROM table1

    IF (@lastKey IS NOT NULL)
    BEGIN
        -- 最大子編號
        SET @subCode = SUBSTRING(@lastKey,LEN(@key)+1,4)
        SELECT @no = No FROM SubCode WHERE Code = @subCode
        -- 下個子編號
        SELECT @subCode = Code FROM SubCode WHERE No = @no + 1
        -- 拼接
        SET @key = @key + @subCode
    END
    /*
    ELSE 直接使用編號 @key
    */

    -- 並發只能用編號唯一引發錯誤,重試
    INSERT INTO table1([key],...)
    VALUES(@key,...)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved