From c87f444a6095db851243a027bc436e5a378ef9a7 Mon Sep 17 00:00:00 2001 From: yitter Date: Sat, 17 Apr 2021 23:33:30 +0800 Subject: [PATCH] auto commit --- SQL/README.md | 9 +++++++++ SQL/sqlserver.sql | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 SQL/README.md create mode 100644 SQL/sqlserver.sql diff --git a/SQL/README.md b/SQL/README.md new file mode 100644 index 0000000..3556b1a --- /dev/null +++ b/SQL/README.md @@ -0,0 +1,9 @@ +# ❄ idgenerator-SQL + +## 介绍 + +这里是在不同数据库中生成雪花ID的脚本。 + + + + diff --git a/SQL/sqlserver.sql b/SQL/sqlserver.sql new file mode 100644 index 0000000..a35d3a1 --- /dev/null +++ b/SQL/sqlserver.sql @@ -0,0 +1,46 @@ +/* +˵ + +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: ҪʼIJȷ @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 = 52^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 + +