首页 > 数据库技术 > 详细

sql2012增加Sequence对象

时间:2016-02-17 18:44:13      阅读:203      评论:0      收藏:0      [点我收藏+]

官方给出了一大堆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

sql2012增加Sequence对象

原文:http://www.cnblogs.com/Snowfun/p/5196078.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!