iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么在SQL中利用Function创建一个长整形的唯一ID
  • 166
分享到

怎么在SQL中利用Function创建一个长整形的唯一ID

2024-04-02 19:04:59 166人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关怎么在sql中利用Function创建一个长整形的唯一ID,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现方法一开

本篇文章给大家分享的是有关怎么在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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么在SQL中利用Function创建一个长整形的唯一ID

本文链接: https://www.lsjlt.com/news/55464.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在SQL中利用Function创建一个长整形的唯一ID
    本篇文章给大家分享的是有关怎么在SQL中利用Function创建一个长整形的唯一ID,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现方法一开...
    99+
    2024-04-02
  • 怎么在python中利用numpy创建一个矩阵
    今天就跟大家聊聊有关怎么在python中利用numpy创建一个矩阵,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具...
    99+
    2023-06-14
  • 怎么在postgresql中创建一个用户
    在postgresql中创建用户的方法:1.启动postgresql服务;2.登录postgresql数据库;3.使用createuser命令创建;具体步骤如下:首先,在命令行中启动postgresql服务;net start postgr...
    99+
    2024-04-02
  • 怎么在MySQL中创建一个用户
    本篇文章为大家展示了怎么在MySQL中创建一个用户,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.使用CREATE USER语句创建用户CREATE U...
    99+
    2024-04-02
  • 怎么在java中创建一个Stream
    怎么在java中创建一个Stream?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了...
    99+
    2023-06-14
  • 怎么在python中利用pandas创建一个Series数据类型
    今天就跟大家聊聊有关怎么在python中利用pandas创建一个Series数据类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内...
    99+
    2023-06-14
  • 利用Java如何在一个不存在文件夹中创建一个文件
    利用Java怎么在不存在文件夹中创建一个文件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。核心代码如下所示:String strPath = ...
    99+
    2023-05-31
    java ava
  • 怎么在Java中创建一个类型
    怎么在Java中创建一个类型?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向...
    99+
    2023-06-14
  • 怎么在vue中创建一个组件
    今天就跟大家聊聊有关怎么在vue中创建一个组件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。方法一:使用 Vue.extend 来创建全局的Vue组件实例:var com1...
    99+
    2023-06-14
  • 怎么在java中创建一个对象
    这篇文章给大家介绍怎么在java中创建一个对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. ...
    99+
    2023-06-14
  • 怎么在Java中创建一个线程
    今天就跟大家聊聊有关怎么在Java中创建一个线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java中线程的创建有两种方式: 1.  通过继承Thread类,重...
    99+
    2023-05-31
    java 线程 ava
  • Python中怎么利用多线程创建一个程序
    这篇文章给大家介绍Python中怎么利用多线程创建一个程序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python线程创建需要关注threading.Thread.join(th) 或者th.join()如果你可以对...
    99+
    2023-06-17
  • Python中怎么利用Scribus创建一个RGB立方体
    本篇文章给大家分享的是有关Python中怎么利用Scribus创建一个RGB立方体,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。作为色轮的替代,我想在立方体表面使用一系列图形来...
    99+
    2023-06-16
  • 如何在IDEA中利用maven创建一个springMVC项目
    如何在IDEA中利用maven创建一个springMVC项目?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、DEA创建项目 新建一个maven project,并且...
    99+
    2023-05-31
    maven springmvc idea
  • 怎么在postgresl中创建一个触发器
    在postgresl中创建触发器的方法:1.启动postgresql服务;2.登录postgresql数据库;3.使用数据库;4.在数据库新建表;5.执行CREATE TRIGGER语句创建触发器;具体步骤如下:首先,在命令行中启动post...
    99+
    2024-04-02
  • 怎么在python中创建一个ndarray数组
    怎么在python中创建一个ndarray数组?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面...
    99+
    2023-06-14
  • 怎么在python中创建一个numpy数组
    本篇文章为大家展示了怎么在python中创建一个numpy数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无...
    99+
    2023-06-14
  • 怎么在Python中创建一个二叉树
    这篇文章将为大家详细讲解有关怎么在Python中创建一个二叉树,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。二叉树节点定义二叉树的节点定义如下:class TreeNode():#...
    99+
    2023-06-14
  • 怎么在java中创建一个构造器
    这篇文章将为大家详细讲解有关怎么在java中创建一个构造器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;...
    99+
    2023-06-14
  • 怎么在mysql中创建一个触发器
    本篇文章为大家展示了怎么在mysql中创建一个触发器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们可以可以使用CREATE TRIGGER语句创建一个新的触发器...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作