說明:
以自動編號型別為主鍵的資料表,在有些場景使用起來會比較麻煩,比如,我們在使用 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