SequenceNumber是SQL Server2012推出的一个 新特性。这个特性允许数据库级别的序列号在多表或 多列之间共享。对于某些场景会非常有用,比如,你 需要在多个表之间公用一个流水号。以往的做法是额 外建立一个表,然后存储流水号。而新插入的流水号
需要两个步骤:
1.查询表中流水号的最大值
2.插入新值(最大值+1)
现在,利用SQL Server2012中的Sequence.这类操 作将会变得非常容易。
SequenceNumber的概念并不是一个新概念,Oracle早就已经实现了

Identity:作用范围是限制本表
SequenceNumber是 一个与构架绑定的数据库级别的对象,而不是与具体 的表的具体列所绑定。
这意味着SequenceNumber带 来多表之间共享序列号的遍历之外,还会带来如下不 利影响:

• 与Identity列不同的是,Sequence插入表中的 序列号可以被Update,除非通过触发器来进行保护
• 与Identity列不同,Sequence有可能插入重复 值(对于循环SequenceNumber来说)
• Sequence仅仅负责产生序列号,并不负责控 制如何使用序列号,因此当生成一个序列号被 Rollback之后,Sequence会继续生成下一个号, 从而在序列号之间产生间隙【不连续】

SequenceNumber的用法 创建语法

CREATE SEQUENCE [schema_name . ] sequence_name
[ AS [ built_in_integer_type | user-defined_integer_type ] ]
[ START WITH ]
[ INCREMENT BY ]
[ { MINVALUE [ ] } |{ NO MINVALUE } ]
[ { MAXVALUE [ ] } |{ NO MAXVALUE } ]
[ CYCLE | { NO CYCLE } ]
[ { CACHE [ ] } | { NO CACHE } ]
[ ; ]

创建案例
Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1

------------------
select next value for dbo.demoSequence
select name,type_desc,start_value,increment,minimum_value,maximum_value,current_value,is_cached,cache_size
Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1
---------------------
create table #test (
  id int
)
--插入测试数据
declare @index int
set @index=0
while (@index<50)
begin
	insert into #test(id) values(next value for dbo.demoSequence)
	set @index=@index+1
end
----展示测试数据
select *  from #test

sequence 最重要的功能便是{因为它是数据库级别的}在多表间共享序列号

----------创建序列号-------------
Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1
----------创建临时测试表t1和临时测试表t2------------------
create table #t1
(
	 id int
)
-----
create table #t2
(
	id int
)
-----插入测试数据
declare @index int
set @index=0
while (@index<50)
begin
	insert into #t1(id) values(next value for dbo.demoSequence)
	insert into #t2(id) values(next value for dbo.demoSequence)
	set @index=@index+1
end
-------展示测试数据

select *  from #t1 
select *  from #t2
#t1 ——> id:0,2,4,6...
#t2 ——> id:1,3,5,7...
----------创建序列号-------------
Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1
MaxValue 5
MinValue 1
Cycle
----------创建临时测试表t1和临时测试表t2------------------
create table #t1
(
	 id int
)

-----插入测试数据
declare @index int
set @index=0
while (@index<20)
begin
	insert into #t1(id) values(next value for dbo.demoSequence)
	insert into #t2(id) values(next value for dbo.demoSequence)
	set @index=@index+1
end
-------展示测试数据
select *  from #t1 

#t1 ——> id:1,2,3,4,5,1,2,3,4,5,1....
重置

通过Alter修改Sequence将其初始化值指定为一个特定值

alter sequence dbo.demoSequence
reStart with 3

Sequence 缓存

简单来说就是一次生成多个序列号(个数=Cache指定的值),使得减少IO。

Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1
MaxValue 5
MinValue 1
Cache 4

sql server查看序列号 sql server 序列号_sql

Sequence 注意事项

sequence 只负责生成序列号,而不管序列号如何使用,如果事物不成功或回滚,Sequence仍然会继承向后生成序列号

sql server查看序列号 sql server 序列号_数据库_02