当前位置: 首页 > article >正文

Sqlserver 之 SequenceNumber(序列)

SequenceNumber是SQL Server2012推出的一个新特性。

直接看用法吧  ↓

SequenceNumber的用法:

CREATE SEQUENCE [schema_name . ] sequence_name

    [ AS [ built_in_integer_type | user-defined_integer_type ] ]

    [ START WITH <constant> ]

    [ INCREMENT BY <constant> ]

    [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]

    [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]

    [ CYCLE | { NO CYCLE } ]

    [ { CACHE [ <constant> ] } | { NO CACHE } ]

    [ ; ]

翻译了一下:

CREATE SEQUENCE [架构.]序列名称

    [ AS [ 建立在整数类型 | 用户定义的整数类型 ] ]

    [ START WITH <开始值> ]

    [ INCREMENT BY <增量值> ]

    [ { MINVALUE [ <最小值> ] } | { NO MINVALUE } ]

    [ { MAXVALUE [ <最大值> ] } | { NO MAXVALUE } ]

    [ CYCLE | { NO CYCLE } ]--循环

    [ { CACHE [ <缓存大小> ] } | { NO CACHE } ]--缓存

    [ ; ]

 

--简单创建 从1开始增量为1,不循环不缓存

create sequence dbo.SetHouseNo as int

start with 1

increment by 1

--获取下一条编号

select next value for dbo.SetHouseNo

--查看序列

Select name as 序列名称,start_value as 开始值,increment as 增量值,minimum_value as 最小值,maximum_value as 最大值,current_value as 当前值,is_cached as 缓存,cache_size as 缓存空间 from sys.sequences where name='SetHouseNo'

--修改,重置序列从1开始

alter sequence dbo.SetHouseNo restart with 1

--测试添加

insert into A values (NEWID(),'HFB'+ Right(Concat('000000',next value for dbo.SetHouseNo),6))

--批量删除

select 'DROP SEQUENCE '+ name from sys.sequences where name not like '%A10772A21A5A4D90BFFC654D63AFC5BC';

使用代替

1.查询表中流水号的最大值
2.插入新值(最大值+1)
3.可以解决少量并发(id,no两字段的表,40并发无压力,保证数据无重复,有缓存设置的话(设置10),100+字段,测试200+无压力)


使用注意:

1.Sequence插入表中的序列号可以被Update
2.Sequence有可能插入重复值(对于循环SequenceNumber来说,当增量到最大值后又从最小值开始)
3.Sequence仅仅负责产生序列号,并不负责控制如何使用序列号,因此当生成一个序列号被Rollback之后,Sequence会继续生成下一个号,从而在序列号之间产生间隙。
4. 为Sequence指定缓存选项,使得减少IO,比如,我们指定Cache选项为4,则当前的Sequence由1增长过4后,SQL Server会再分配4个空间变为从5到8,当分配到9时,SQL Server继续这以循环,如果不指定Cache值,则值由SQL Server进行分配。
5. 序列查看:在SQL Server Management Studio中数据库-可编程性-序列

 

说了这么多,说白了,这个哥们就是拿来做一个数据的序号,避免重复的序号,起因就是一个表插入生成一个唯一的字母+数字的编号,如JFT0001,JFT002。。。原本同事的写法就是直接Count+1,当多个人同时操作数据插入这个表,可能就会出现多个同样的JFT002,JFT002,JFT002。。。然后各种坑了。。从而引入了这个序列,真心好用,今天突然一个朋友问起怎么处理这个问题,就顺手记录下。

创建一个序列,然后通过存储过程来调用一下(获取下一个序列号),然后根据需求组装或者直接返回。

 

 

http://www.lryc.cn/news/2419348.html

相关文章:

  • 转PDP-11时代 美国的大跃进运动
  • 老毛桃winpe优盘启动系统个性修改全攻略.(全)
  • WEP/WPA/WPA2/WPA3初识
  • 中华黑豹计算机病毒,关于中华黑豹病毒...-爱毒霸交流论坛
  • mplayer在CLI下收听网络广播和网络电视
  • Terminal Service License Server
  • 中兴V880 ROOT、刷Recovery刷机教程全解
  • 【历史上的今天】11 月 8 日:为开源献身的互联网之子;卷积神经网络 LeNet-5 问世;特斯拉发明遥控器
  • [SceneKit专题]14-Motion-Control运动控制
  • 织梦CMS企业官网模版源码 淋浴卫浴产品官网源码 卫浴行业模版源码 家居卫浴设计
  • 如何搭建个人博客网站【图/文教程】
  • Quartus-II入门
  • wordpress一些常用代码
  • MFC 刷新失效的Picture控件
  • Gensim做中文主题模型(LDA)
  • 利用电脑玩android版天天连萌刷高分 二,利用计算机玩Android版“天天连萌”刷高分(一)——截图...
  • javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative
  • Solid converter【专业PDF转换器】
  • 【爬虫】get 和 post 的区别
  • 如何为微信小程序添加在线客服和用户支持功能
  • Honey Select 2 AIShoujo 自用搜集插件+下载地址
  • svchost.exe[1348]中发生未处理的win32异常 分析
  • 针不错!10+个综合资源网站,好用的很网站!
  • https://www.luogu.org/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi
  • Lou's Pseudo 3d Page v0.91
  • marquee属性详细解答
  • H3C交换机路由器配置命令大全
  • 将数据与OpenLayers结合在一起
  • 图像分割之(五)活动轮廓模型之Snake模型简介
  • shell脚本中四则运算