Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
陈太太先生
雪花ID全家桶(SnowFlake IdGenerator)
提交
c87f444a
雪
雪花ID全家桶(SnowFlake IdGenerator)
项目概览
陈太太先生
/
雪花ID全家桶(SnowFlake IdGenerator)
与 Fork 源项目一致
Fork自
yitter / 雪花ID全家桶(SnowFlake IdGenerator)
通知
6
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
雪
雪花ID全家桶(SnowFlake IdGenerator)
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
c87f444a
编写于
4月 17, 2021
作者:
yitter
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
auto commit
上级
4d9d0d62
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
55 addition
and
0 deletion
+55
-0
SQL/README.md
SQL/README.md
+9
-0
SQL/sqlserver.sql
SQL/sqlserver.sql
+46
-0
未找到文件。
SQL/README.md
0 → 100644
浏览文件 @
c87f444a
# ❄ idgenerator-SQL
## 介绍
这里是在不同数据库中生成雪花ID的脚本。
SQL/sqlserver.sql
0 → 100644
浏览文件 @
c87f444a
/*
设计说明:
1.这是SQL Server的一个内置方法,运行此脚本后,将在SQL Server的“可编程性-函数-标量值函数”中增加一个方法 Fn_NextSnowId
2.生成的ID = 时间差 + WokerId + 随机数
时间差 = 当前时间戳(毫秒单位) - 1582136402000
WorkerId = {配置值}
随机数 = 5 至 2^SeqBigLength-1 之间的整数
3.调用方法:
例如:select dbo.Fn_NextSnowId(rand())
*/
CREATE
function
dbo
.
Fn_NextSnowId
(
@
RandomSeed
float
-- 生成ID的函数,需要有一个随机数,在调用时,传入系统函数 rand() 即可
)
returns
bigint
as
begin
declare
@
CurrentTime
bigint
declare
@
TimeTick
bigint
declare
@
WorkerId
int
declare
@
WorkerIdBigLength
int
declare
@
SeqBigLength
int
-- Begin: 以下是需要初始化的参数,请确保 @WorkerIdBigLength 和 @SeqBigLength 的设置值跟其它应用程序相同
set
@
WorkerId
=
1
-- 最大值 2^@WorkerIdBigLength-1
set
@
WorkerIdBigLength
=
4
-- @WorkerIdBigLength+@SeqBigLength,不要超过22
set
@
SeqBigLength
=
8
-- End
-- 当前时间戳(毫秒单位)
set
@
CurrentTime
=
CONVERT
(
BIGINT
,
DATEDIFF
(
MI
,
'1970-01-01 00:00:00.000'
,
GETUTCDATE
()))
*
60000
+
DATEPART
(
S
,
GETUTCDATE
())
*
1000
+
DATEPART
(
MS
,
GETUTCDATE
())
-- 用当前时间戳减去基础时间,得出ID的时间差部分
set
@
TimeTick
=@
CurrentTime
-
1582136402000
-- 生成ID
-- 雪花ID的序列数 = 5至2^SeqBigLength-1之间的随机数。 (5 + round((POWER(2, @SeqBigLength)-1) * rand(), 0)
return
@
TimeTick
*
POWER
(
2
,
@
WorkerIdBigLength
+
@
SeqBigLength
)
+
@
WorkerId
*
POWER
(
2
,
@
SeqBigLength
)
+
(
5
+
round
((
POWER
(
2
,
@
SeqBigLength
)
-
1
)
*
@
RandomSeed
,
0
))
end
GO
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录