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