ACCESS 模拟雪花ID

说明:

以自动编号类型为主键的数据表,在有些场景使用起来会比较麻烦,比如,我们在使用 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

 

posted @ 2024-05-31 22:38  一曲轻扬  阅读(19)  评论(0编辑  收藏  举报