怎么在SQL中利用Function创建一个长整形的唯一ID
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇文章给大家分享的是有关怎么在SQL中利用Function创建一个长整形的唯一ID,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现方
千家信息网最后更新 2025年11月07日怎么在SQL中利用Function创建一个长整形的唯一ID
本篇文章给大家分享的是有关怎么在SQL中利用Function创建一个长整形的唯一ID,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
实现方法
一开始在C#等面向对像语言中编写一个获取PK的方法,那是很顺序就完成了。
接着是SQL中,如果要用脚本导入数据,那就要提供一个SQL的方法来获取PK。
最初设计PK的组成:时间(yyMMddHHmmssmsS) + '4位随机数' ,于是卡卡很快完成dbo.pk()
Create function dbo.pk()returns bigintasbegin 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)endgo
然后来获取一个10000PK测试:
declare @tab as table(pk bigint)declare @i as integerset @i =0while(@i<10000)begininsert @tabselect dbo.pk() set @i = @i+1endselect pk,count(1) cntfrom @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)asbegin 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 returnendgo
批量测试一下
select * from dbo.pks(500000)
正常返回500000行,没有一行重复!
以上就是怎么在SQL中利用Function创建一个长整形的唯一ID,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
方法
冲突
序数
时间
更多
机会
知识
篇文章
还是
问题
随机数
卡卡
测试
设计
实用
接下来
一行
不大
事情
位数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全管理制度操作规程
数据库数据的处理
怎么弄京豆代挂服务器
伤害世界服务器购买
软件开发怎么接订单
深圳中行软件开发是外包
中科大网络安全教育
剑侠世界2手游数据库
网络安全设备优缺点
小马软件开发有限公司
魔兽怀旧服世界联盟服务器
sql数据库设置端口号
政府机关单位网络安全实施计划
图书馆抗疫数据库
软件开发管理的英文
杨浦区信息化软件开发哪家好
数据库技术培训学校
株洲it软件开发工程师学校
软件开发印花税计税依据
网络安全操作题题库
软件开发的男生很无聊
存储区域网络安全插画
暨大网络安全专业排名
dell机架服务器网络不通
运大网络技术有限公
软件开发转系统专员的原因
计算机的网络技术应用
网络技术类岗位
上海盖世网络技术有限公司开票
虚拟软件开发公司