ACCESS 模擬雪花ID

一曲轻扬發表於2024-05-31

說明:

以自動編號型別為主鍵的資料表,在有些場景使用起來會比較麻煩,比如,我們在使用 INSERT INTO 往資料表裡面插入資料時,不能精準得獲取剛剛插入的記錄的ID值,也就無法對這條記錄進行更多的操作,比如把這個ID值外鏈給其他資料表等.

也有人會說用MAX不就可以取到這個ID值了嗎?嗯 ,一個人用的話,這個方法確實沒毛病,但是在多人使用的情況下,就沒辦法精準找到自己剛剛生成的記錄的ID了.

Function GenerateSnowflakeID() As String    '生成一個雪花ID
    Dim epoch As Date
    epoch = DateSerial(2020, 1, 1) ' 設定起始時間為2020年1月1日
    
    Dim timestamp As Double
    timestamp = (Now - epoch) * 86400000 ' 計算當前時間與起始時間的毫秒數
    
    Dim UserID As Long
    UserID = M1.GetCurrentUser(True) ' 使用者ID
    
    Dim sequence As Integer
    sequence = Rnd * 4096 ' 隨機生成一個12位的序列號
    
    ' 將時間戳、機器ID和序列號拼接成雪花ID.取固定長度為20位,這個可以自定義
    GenerateSnowflakeID = Left(CStr(timestamp) & CStr(UserID) & CStr(sequence) & "000000", 20)
End Function

返回值演示:

?GenerateSnowflakeID
13935819500013801000
13935819400013092000
13935819400012411000
13935819300013541000
13935819300018440000
13935819200011976000
13935819200011840000
13935819100011395000
13935819100011043000
13935819000011968000
13935818900019640000
13935818800011218000
13935818600013236000

相關文章