例如,如果选择缓存大小为50,则SQL Server不会保留缓存50个单独的值。它只缓存当前值和缓存中剩下的值的数量。这意味着存储缓存所需的内存量始终是序列对象的数据类型的两个实例。
1、创建一个简单的序列
CREATE sequence Seq_test --序列的名称:Seq_test as bigint --类型 start with 100000001 --开始值 increment by 1 --步长 minvalue 1 --最小值 maxvalue 999999999 --最大值 no cycle --不循环 cache --设置缓冲
2、查询序列
创建了序列之后,可以通过SQL Server 2012新增的视图sys.sequences来查看刚才创建成功的Sequence,如下图所示:
--查看序列 SELECT * FROM sys.sequences WHERE name='Seq_test'
3、使用序列
在单表中插入序列
在多表间共享序列号
--创建测试表1和测试表2 CREATE table #test1 ( id bigint ) CREATE table #test2 ( id bigint ) --插入测试数据 DECLARE @index bigint SET @index=100000001 WHILE (@index<100000005) begin insert INTO #test1(id) VALUES (NEXT value FOR Seq_test) insert INTO #test2(id) VALUES (NEXT value FOR Seq_test) SET @index=@index+1 end --展示测试数据 SELECT * FROM #test1 SELECT * FROM #test2
结果如下图所示:
在可以看到,如果我们不指定Sequence的上限和下限,则默认使用所指定数据类型的最大值和最小值作为上限和下限(INT类型的的上下限).当达到上线后,可以指定循环来让Sequence达到上限后从指定的开始值重新开始循环。
--创建序列 CREATE sequence Seq_test1 --序列的名称:Seq_test as int --类型 start with 1 --开始值 increment by 1 --步长 minvalue 1 --最小值 maxvalue 5 --最大值 cycle --循环 --创建测试表 CREATE table test1 ( id int ) DECLARE @index int SET @index=0 WHILE(@index<10) begin insert INTO test1(id) VALUES (NEXT value FOR Seq_test1) SET @index=@index+1 end --查看结果 SELECT * FROM test1
查询结果如下图所示:
可以通过修改Sequence将其初始值指定为一个特定值
--修改序列的值 ALTER sequence Seq_test1 restart WITH 3 --查询当前值 SELECT next value FOR Seq_test1
查询结果如下图所示:
Sequence一个需要注意的情况是Sequence只负责生成序列号,而不管序列号如何使用,如果事务不成功或回滚,SequenceNumber仍然会继续向后生成序列号
我们还可以为Sequence指定缓存选项,使得减少IO,比如,我们指定Cache选项为3,则当前的Sequence由1增长过3后,SQL Server会再分配3个空间变为从4到6,当分配到7时,SQL Server继续这以循环,如果不指定Cache值,则值由SQL Server进行分配。一个简单的例子如图所示。
到此这篇关于SQL Server中Sequence对象用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
更多SQL内容来自木庄网络博客