SQL Server 2012 SEQUENCE 对象

2014-11-24 18:33:15 · 作者: · 浏览: 0

我们可以在SSMS中创建也可以使用SQL Server脚本创建序列对象:




使用SQL创建序列对象:


IF EXISTS(SELECT*FROMsys.sequencesWHEREname=N'TestSeq')


DROP SEQUENCETestSeq;


GO



--创建序列对象


CREATE SEQUENCETestSeqAStinyint


START WITH1


INCREMENT BY1;


GO



--创建表


CREATE TABLE TEST


(ID tinyint, Namevarchar(150))



--产生序列号码并插入表中


INSERT INTO TEST


(ID,Name)


VALUES


(NEXT VALUE FOR TestSeq,'allen')



INSERT INTO TEST


(ID,Name)


VALUES


(NEXT VALUE FOR TestSeq,'kevin')



SELECT * FROM TEST



--产生序列可以重复使用,下面的例子当序列号码超过255后又重新从0开始。



CREATE SEQUENCE[dbo].[Test1Seq]


AS [tinyint]


START WITH 0


INCREMENT BY 5


CYCLE



SELECT


NEXT VALUE FOR [Test1Seq]


GO 110



--重新将序列初始值变为5


ALTER SEQUENCEdbo.TestSeq


RESTART WITH 5;



SELECT * FROM sys.sequenceswherename='TestSeq'



--共享序列,两个表可以使用同一个序列对象(Identity列是不可以的


CREATE SEQUENCEdbo.SeqASINT


START WITH 1


INCREMENT BY 1


CREATE TABLE dbo.Examp1


(


Seq INT NOT NULL,


Name VARCHAR(50)NOTNULL


);



CREATE TABLE dbo.Examp2


(


Seq INT NOT NULL,


Name VARCHAR(50)NOTNULL


);



INSERT INTO dbo.Examp1(Seq,Name)VALUES(NEXTVALUEFORdbo.Seq,'Tom');


INSERT INTO dbo.Examp2(Seq,Name)VALUES(NEXTVALUEFORdbo.Seq,'Jerry');



SELECT * FROM Examp1


SELECT * FROM Examp2



--可以直接在查询中使用序列对象(Identity列是不可以的)


CREATE SEQUENCESeqOrderAStinyint


START WITH1


INCREMENT BY1


MINVALUE 1


NO MAXVALUE


CYCLE;


GO



SELECT ID,Name,


NEXT VALUE FOR SeqOrder OVER(ORDERBYNameDESC)As[Order]


FROM test;



为了提升性能,还可以使用CACHE选项,这样就可以将序列号码缓存到内存,减少IO操作,值得一提的是序列对象可以指定最大值和最小值,增加值可以为负数。


更多信息可以参考:http://msdn.microsoft.com/zh-cn/library/ff878091.aspx