auto commit
This commit is contained in:
9
SQL/README.md
Normal file
9
SQL/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# ❄ idgenerator-SQL
|
||||
|
||||
## 介绍
|
||||
|
||||
这里是在不同数据库中生成雪花ID的脚本。
|
||||
|
||||
|
||||
|
||||
|
||||
46
SQL/sqlserver.sql
Normal file
46
SQL/sqlserver.sql
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
1.<2E><><EFBFBD><EFBFBD>SQL Server<65><72>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д˽ű<CBBD><C5B1><EFBFBD><F3A3ACBD><EFBFBD>SQL Server<65>ġ<EFBFBD><C4A1>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Fn_NextSnowId
|
||||
|
||||
2.<2E><><EFBFBD>ɵ<EFBFBD>ID = ʱ<><CAB1><EFBFBD><EFBFBD> + WokerId + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ʱ<><CAB1><EFBFBD><EFBFBD> = <20><>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵥λ<EBB5A5><CEBB> - 1582136402000
|
||||
WorkerId = {<7B><><EFBFBD><EFBFBD>ֵ}
|
||||
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 5 <20><> 2^SeqBigLength-1 ֮<><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
3.<2E><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
<09><><EFBFBD>磺select dbo.Fn_NextSnowId(rand())
|
||||
|
||||
*/
|
||||
CREATE function dbo.Fn_NextSnowId
|
||||
(
|
||||
@RandomSeed float -- <20><><EFBFBD><EFBFBD>ID<49>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD> rand() <20><><EFBFBD><EFBFBD>
|
||||
)
|
||||
returns bigint
|
||||
as
|
||||
begin
|
||||
declare @CurrentTime bigint
|
||||
declare @TimeTick bigint
|
||||
declare @WorkerId int
|
||||
declare @WorkerIdBigLength int
|
||||
declare @SeqBigLength int
|
||||
|
||||
-- Begin: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> @WorkerIdBigLength <20><> @SeqBigLength <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ͬ
|
||||
set @WorkerId = 1 -- <20><><EFBFBD><EFBFBD>ֵ 2^@WorkerIdBigLength-1
|
||||
set @WorkerIdBigLength = 4 -- @WorkerIdBigLength+@SeqBigLength<74><68><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>22
|
||||
set @SeqBigLength = 8
|
||||
-- End
|
||||
|
||||
-- <20><>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵥λ<EBB5A5><CEBB>
|
||||
set @CurrentTime = CONVERT(BIGINT,DATEDIFF(MI,'1970-01-01 00:00:00.000', GETUTCDATE())) * 60000 + DATEPART(S,GETUTCDATE()) * 1000 + DATEPART(MS, GETUTCDATE())
|
||||
|
||||
-- <20>õ<EFBFBD>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD>ó<EFBFBD>ID<49><44>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EEB2BF>
|
||||
set @TimeTick=@CurrentTime-1582136402000
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD>ID
|
||||
-- ѩ<><D1A9>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 5<><35>2^SeqBigLength-1֮<31><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user