正确使用SQL Server 2012中的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中的序列属性
序列创建

创建两张表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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值