官方给出了一大堆SQL2012相对于SQL2008R2的新特性,但是大多数对于普通开发人员来说都是浮云,根本用不到,下面就说说一些对于开发人员来说比较有用的新特性。

Sequence对象对于Oracle用户来说是最熟悉不过的数据库对象了,现在在SQL Server中终于也看到了类似的对象,只是在使用的语法上有一点点不一样。创建语法也是CREATE SEQUENCE,使用的时候需要使用NEXT VALUE FOR来取下一个值:

1.用法

create sequence sq_1
as bigint
start with 1
increment by 1; select next value for sq_1 --as firstuse; insert into TestSequence_seq(seq_id,seq_value) values(next value for sq_1 ,'test');
insert into TestSequence_seq(seq_id,seq_value) values(next value for sq_1 ,'test');
insert into TestSequence_seq(seq_id,seq_value) values(next value for sq_1 ,'test');
insert into TestSeq(seq_id,seq_value) values(next value for sq_1 ,'test');
insert into TestSequence_seq(seq_id,seq_value) values(next value for sq_1 ,'test'); select * from TestSequence_seq
select * from TestSeq
select name,type_Desc,start_value,increment,minimum_value,maximum_value,current_value,is_cached from sys.sequences

下图可看出SequenceNumber最重要的功能是在多表间共享序列号

2.通过修改Sequence将其初始值指定为一个特定值,

alter sequence sq_1 restart with 100
select next value for sq_1

3.Sequence一个需要注意的情况是Sequence只负责生成序列号,而不管序列号如何使用,如果事务不成功或回滚,SequenceNumber仍然会继续向后生成序列号,

alter sequence sq_1 restart with 200  --重置为200
begin tran
    insert into TestSeq(seq_id,seq_value) values(next value for sq_1 ,'test');
rollback --虽然事务回滚,但序号仍然向后加1
select next value for sq_1

4.还可以为Sequence指定缓存选项,使得减少IO,比如,我们指定Cache选项为4,则当前的Sequence由1增长过4后,SQL Server会再分配4个空间变为从5到8,当分配到9时,SQL Server继续这以循环,如果不指定Cache值,则值由SQL Server进行分配。

create sequence sq_1
as bigint
start with 1
increment by 1
cache 5; select name,type_Desc,start_value,increment,minimum_value,maximum_value,current_value,cache_size from sys.sequences

CACHE  n 一次就放入内存n个值。默认值为20,如果你要连续的使用序列,如定单流水号的产生,请将N设大点。如果你不使用序列,而是自己写代码,请注意你的程序效率和竞争锁死情况的发生。
停止数据库后,内存中存放的序列值会丢失

使用序列的原则如下:
如果你想用做主键,请使用不可循环的序列。
如果想快速发生序列的值,请将cache的值加大。
如果序列内的值要很长时间才能使用完,可以考虑使用可以循环的序列。

sql2012增加Sequence对象的更多相关文章

  1. 使用IDENTITY列属性和Sequence对象

    使用IDENTITY列属性 1. 建立表 Sales.MyOrders USE TSQL2012; IF OBJECT_ID(N'Sales.MyOrders', N'U') IS NOT NULL ...

  2. Sql Server增加Sequence序列语句

    1.创建序列 下面的示例创建名为 DecSeq 使用一个序列 十进制 具有介于 0 到 255 之间的数据类型.序列以 125 开始,每次生成数字时递增 25. 因为该序列配置为可循环,所以,当值超过 ...

  3. 【转】MySQL中增加sequence管理功能(模拟创建sequence)

    1.oracel可以直接支持sequence,但是mysql不支持sequence,因此我们要通过模拟sequence的方法在mysql中创建sequence.模拟sequence的方法:项目场景:项 ...

  4. oracle增加sequence

    (1)删除序列;  (2)重新创建: 这个方法比较简单粗暴. drop sequence  sequence_name; create sequence   sequence_name minvalu ...

  5. [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  6. Mybatis增加对象属性不增加mapper.xml的情况

    Mybatis增加对象属性不增加mapper.xml的情况: 只增加Model 对象的属性,在查询语句中返回相同名称的字段,但是在mapper中的 resultMap上面不进行新增字段的增加,查询结果 ...

  7. Atitit.数据库新特性战略规划 mssql sql server 2008 SQL2012 SQL2014

    Atitit.数据库新特性 mssql sql server 2008 SQL2012 SQL2014 1. Sql2012 新特性 1 1.1. 增加了Sequence对象. 1 1.2. 新的分页 ...

  8. oracle之sequence详解

    Oracle提供了sequence对象,由系统提供自增长的序列号,每次取的时候它会自动增加,通常用于生成数据库数据记录的自增长主键或序号的地方. sequence的创建需要用户具有create seq ...

  9. Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入

    本节主要内容:       1.实例化Spring容器示例    2.利用Spring容器创建JavaBean对象    3.如何控制Bean实例化    4.利用Spring实现bean属性sett ...

随机推荐

  1. 敏捷开发之scrum模型

    什么是敏捷开发? 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法. 怎么理解呢?首先,我们要理解它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它 ...

  2. 《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group

    agenda-group 规则的调用与执行是通过StatelessKieSession或KieSession来实现的,一般的顺序是创建一个StatelessKieSession或KieSession, ...

  3. mac/linux ssh 免密码登陆配置及错误处理

    先说一下,mac 和linux 的设置方法是一样的 一般做法可以参照http://www.tuicool.com/articles/i6nyei 第一步:生成密钥.在终端下执行命令: ssh-kege ...

  4. RPi 2B QEMU 模拟树莓派

    /******************************************************************************** * RPi 2B QEMU 模拟树莓 ...

  5. SQLServer2008导入Excel遇到的问题

    今天同事给客户处理基础物料信息,要把Excel中的几千行物料信息导入到数据库.觉得不是啥难事,写个SQL语句而已,没成想,实际一操作,出问题了. SELECT * FROM OPENROWSET('M ...

  6. 在javascript中使用提示信息来熟悉当前的程序流程

    最近,因为需要,开始了解javascript,这个对我来说是个新的东西,在分析现有程序的功能的时候,需要增加一些提示信息来帮助了解程序的处理流程.于是在网上了解了一下提示信息的使用和区别.在此整理一下 ...

  7. python3 csv数据读入/写出

    这是读入 1 import csv 2 #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open() 3 with open("XXX ...

  8. 转载.Avalon-MM 阿窝龙妹妹应用笔记

    Avalon Interface Special http://www.altera.com.cn/literature/manual/mnl_avalon_spec.pdf Avalon总线是SOP ...

  9. 一个detect问题引发的一系列思考

    在用BoneCP的时候,发现一个JVM日志中报了一个异常,大意是“探测(detect)到有数据库链接没有关闭”(不得不说JVM的强大),但是我用的是连接池里面的链接啊,怎么会需要关闭呢? 有问题首先找 ...

  10. SpringMVC上传文件大小的设置

    在spring-mvc.xml(springmvc的配置文件)里: <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id ...