91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在SQL中利用Function創建一個長整形的唯一ID

發布時間:2021-04-07 17:22:58 來源:億速云 閱讀:181 作者:Leah 欄目:數據庫

本篇文章給大家分享的是有關怎么在SQL中利用Function創建一個長整形的唯一ID,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

實現方法

一開始在C#等面向對像語言中編寫一個獲取PK的方法,那是很順序就完成了。

接著是SQL中,如果要用腳本導入數據,那就要提供一個SQL的方法來獲取PK。

最初設計PK的組成:時間(yyMMddHHmmssmsS) + '4位隨機數'   ,于是卡卡很快完成dbo.pk()

Create function dbo.pk()
returns bigint
as
begin 
 declare @pk as bigint,@fix bigint,@idx int,@ts as datetime
 set @ts = GETDATE()
 set @pk = convert(bigint,convert(varchar(6),@ts,12) + replace(convert(varchar(12),@ts,114),':',''))*10000
 select @idx = A*10000
 from vRand
 return (@pk + @idx)
end
go

然后來獲取一個10000PK測試:

declare @tab as table(pk bigint)
declare @i as integer
set @i =0
while(@i<10000)
begin
insert @tab
select dbo.pk() 
set @i = @i+1
end
select pk,count(1) cnt
from @tab
 group by pk
 having COUNT(1)>1

oh my god!竟然有30多個重復的。

可見這個方法,做為獲取單個PK,那問題不大,但在做批量保存的時候,可能會發生主鍵沖突。

因此再設計一個支持批量保存的。

既然4位隨機數不能保證毫秒級的唯一,那就只能用有序數了,把PK的組成改為:時間(yyMMddHHmmssmsS) + '4位有序數'

再考慮到年份只是2位數,跟面向對像中的PK組成有機會在202x年之后存在沖突,因此增加一個標識 ‘1'+yy作為年以延長千年蟲問題,雖然還是有機會發生沖突,但那也是幾百年以后的事情了。

但是為了保持效率和沖突的概率,還是將PK改為:'1'+時間(yyMMddHHmmssms) + '4位有序數'.

接下來又是一頓卡卡卡,dbo.pks(@count)已出:

CREATE function dbo.pks(@count as int)
returns @pks table(pk bigint,id int)
as
begin 
  declare @pk as bigint,@fix bigint,@idx int,@ts as datetime,@lop int,@i int
  set @ts = GETDATE()
  set @pk = convert(bigint,'1'+convert(varchar(6),@ts,12) + replace(convert(varchar(11),@ts,114),':',''))*10000
  set @idx =0
  set @lop = CEILING(@count/10000.0) 
  set @i = 1
  while(@lop >0)
  begin
    set @pk = @pk + 10000
    set @idx = 0
    while(@idx<10000 and @idx<@count)
    begin
      insert @pks(pk,id)
      values(@pk+@idx,@idx+ @i)
      set @idx = @idx +1
    end
    set @lop = @lop -1
    set @i = @i+10000
  end
  return
end
go

批量測試一下

select * from dbo.pks(500000)

正常返回500000行,沒有一行重復!

以上就是怎么在SQL中利用Function創建一個長整形的唯一ID,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

神农架林区| 理塘县| 息烽县| 昭苏县| 长春市| 逊克县| 瑞安市| 永吉县| 河津市| 乐山市| 邢台市| 石嘴山市| 巨野县| 玛纳斯县| 土默特右旗| 湖州市| 石阡县| 城步| 西平县| 青川县| 巴里| 湖北省| 登封市| 公安县| 会昌县| 林甸县| 于都县| 长岭县| 滨州市| 新巴尔虎右旗| 怀集县| 渑池县| 永兴县| 定南县| 定襄县| 平遥县| 惠东县| 进贤县| 合阳县| 永修县| 茂名市|