正确使用SQL Server 2012中的SEQUENCE

目录

    • 目录
    • SQL Server中的SEQUENCE
    • SEQUENCE的正确使用
    • 参考资料

我们知道在oracle中可方便的使用序列,即SEQUENCE,但是SQL Server直到2012才引入SEQUENCE。在SQL Server 2008中只有identity,但这并不能满足我们的需求。本文将介绍 SQL Server 2012中的SEQUENCE的正确使用。

SQL Server中的SEQUENCE

创建一个测试数据库:hyperdb

--创建测试数据库
USE master
GO

CREATE DATABASE hyperdb GO

在数据库级别,创建一个bigint的SEQUENCE,然后检查创建的情况:

--创建数据库级别的序列:SEQUENCE
USE hyperdb
go

CREATE SEQUENCE [dbo].[TableSequenceID] AS [bigint] START WITH 50 INCREMENT BY 1 --检查序列的创建情况 SELECT * FROM sys.sequences

或查看SSMS中的序列属性
正确使用SQL Server 2012中的SEQUENCE_第1张图片

创建两张表TestA与TestB做序列测试:

--创建测试表
CREATE TABLE TestA ( ID BIGINT NOT NULL primary key, NAME NVARCHAR ( 20 ) ) CREATE TABLE TestB ( ID BIGINT NOT NULL primary key, NAME NVARCHAR ( 20 ) )

在insert记录时使用序列:

--分别对表TestA与TestB插入记录
INSERT INTO TestA VALUES ( NEXT VALUE FOR TableSequenceID, 'Hyper A' ) INSERT INTO TestB VALUES ( NEXT VALUE FOR TableSequenceID, 'Hyper B' ) INSERT INTO TestA VALUES ( NEXT VALUE FOR TableSequenceID ,'Hyper A' ) INSERT INTO TestB VALUES ( NEXT VALUE FOR TableSequenceID ,'Hyper B' )

检查序列使用的结果:

select * from TestA select * from TestB

SEQUENCE的正确使用

上述对SQL Server 2012中的SEQUENCE进行了简单使用,对正确使用SEQUENCE时还需注意如下3个问题:

  • 由于序列是数据库级别的,因此单表中的值是不连续的
  • 序列可以缓存到内存中,如使用如下T-SQL创建序列,缓存25个序列值(注意:CACHE 25)
CREATE SEQUENCE [dbo].[TableSequenceID] AS [bigint] START WITH 50 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE CACHE 25
  • 当获取到下一个序列值时,即该序列值被使用,而不管是否是INSERT/SELECT
SELECT NEXT VALUE FOR TableSequenceID 

参考资料

  1. Sequences in SQL Server 2012
    http://www.sqlservercentral.com/articles/sequence/88422/

  2. Sequence Numbers
    https://msdn.microsoft.com/en-us/library/ff878058%28v=SQL.110%29.aspx

你可能感兴趣的:(sql,sql,server,server,序列,sequence,2012)