沃梦达 / 编程技术 / 数据库 / 正文

SQL Server序列SEQUENCE用法介绍

序列SEQUENCE是SQL Server 2012及以上版本引入的一种新对象,可以生成不重复的数字序列,用于生成主键或其他需要连续数字的场景。

SQL Server序列SEQUENCE用法介绍

序列SEQUENCE是什么?

序列SEQUENCE是SQL Server 2012及以上版本引入的一种新对象,可以生成不重复的数字序列,用于生成主键或其他需要连续数字的场景。

如何创建序列SEQUENCE?

可以使用以下语法创建序列SEQUENCE:

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

其中:
- schema_name是可选项,表示序列所属的模式名称,默认为dbo;
- sequence_name是生成的序列名称;
- built_in_integer_type或user-defined_integer_type是可选项,用于定义序列的数据类型,默认为bigint;
- START WITH参数定义序列的起始值,默认为1;
- INCREMENT BY参数定义序列每次增长的量,默认为1;
- MINVALUE和MAXVALUE参数定义序列可以的最小值和最大值;
- CYCLE参数表示当序列到达最大值时是否循环重新开始,默认为不循环;
- CACHE参数表示序列值的缓存数量,可以提高性能。

例如,创建一个起始值为100,每次自增5,最大值为1000的序列:

CREATE SEQUENCE my_sequence
START WITH 100
INCREMENT BY 5
MAXVALUE 1000;

如何使用序列SEQUENCE?

使用序列SEQUENCE时,可以通过NEXT VALUE FOR语句获取下一个序列值。例如:

SELECT NEXT VALUE FOR my_sequence;

每次执行此语句,都会返回一个不重复的序列值,直到达到序列的最大值。

可以使用序列序列创建表的主键。例如:

CREATE TABLE my_table
(
    id bigint PRIMARY KEY DEFAULT NEXT VALUE FOR my_sequence,
    name varchar(50) NOT NULL
)

上面的语句将会创建一个带有自动生成主键的表。

示例

示例1:根据序列值自动生成编号

CREATE SEQUENCE order_sequence
START WITH 1000
INCREMENT BY 1
MAXVALUE 99999;

CREATE TABLE orders
(
    order_id varchar(20) PRIMARY KEY DEFAULT 'ORD' + RIGHT(REPLICATE('0',5) + CAST(NEXT VALUE FOR order_sequence AS varchar(5)),5),
    customer_id int NOT NULL,
    amount decimal(10,2) NOT NULL
);

上面的代码创建了一个序列,用于生成订单编号。在创建orders表时,使用了序列的NEXT VALUE FOR语法来生成默认的主键值,即订单编号。可以看到,订单编号由ORD和序列值拼接而成,并保证了值的唯一性和连续性。

示例2:给员工生成工号

CREATE SEQUENCE employee_sequence
START WITH 100
INCREMENT BY 1
MAXVALUE 999;

CREATE TABLE employees
(
    id int PRIMARY KEY DEFAULT NEXT VALUE FOR employee_sequence,
    name varchar(50) NOT NULL,
    title varchar(50) NOT NULL
);

上面的代码创建了一个序列,用于生成员工工号。在创建employees表时,使用了序列的NEXT VALUE FOR语法来生成默认的主键值,即员工工号。可以看到,员工工号由序列值自动生成,并保证了值的唯一性和连续性。

本文标题为:SQL Server序列SEQUENCE用法介绍

基础教程推荐