Mô tả
Sequence là dãy số nguyên có thứ tự, thường dùng tạo giá trị duy nhất cho khóa chính (tự động tăng) thay cho IDENTITY.
Tạo Sequence (CREATE SEQUENCE)
CREATE SEQUENCE [schema.] ten_sequence
[AS kieu_du_lieu]
[START WITH gia_tri_khoi_dau]
[INCREMENT BY gia_tri_buoc_nhay]
[MINVALUE gia_tri_min | NO MINVALUE]
[MAXVALUE gia_tri_max | NO MAXVALUE]
[CYCLE | NO CYCLE]
[CACHE gia_tri_cache | NO CACHE];
Tham số:
- AS kieu_du_lieu: BIGINT, INT, TINYINT, SMALLINT, DECIMAL, NUMERIC (mặc định BIGINT).
- START WITH: Giá trị đầu tiên.
- INCREMENT BY: Bước nhay (dương = tăng, âm = giảm).
- MINVALUE / NO MINVALUE: Giá trị nhỏ nhất / không giới hạn.
- MAXVALUE / NO MAXVALUE: Giá trị lớn nhất / không giới hạn.
- CYCLE: Quay lại đầu khi hết dãy.
- NO CYCLE: Dừng lại khi hết dãy (mặc định).
- CACHE: Số giá trị lưu cache để giảm I/O đĩa.
- NO CACHE: Không cache.
Ví dụ
CREATE SEQUENCE contacts_seq
AS BIGINT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999
NO CYCLE
CACHE 10;
Dãy contacts_seq: bắt đầu 1, tăng 1, max 99999, không lặp, cache 10 giá trị.
Rút gọn (tự động mặc định):
CREATE SEQUENCE contacts_seq
START WITH 1
INCREMENT BY 1;
Lấy giá trị tiếp theo (NEXT VALUE FOR)
SELECT NEXT VALUE FOR contacts_seq;
Sử dụng trong INSERT
INSERT INTO contacts (contact_id, last_name)
VALUES (NEXT VALUE FOR contacts_seq, 'Smith');
Xóa Sequence (DROP SEQUENCE)
DROP SEQUENCE ten_sequence;
DROP SEQUENCE contacts_seq;
Xem thuộc tính Sequence
SELECT *
FROM sys.sequences
WHERE name = 'ten_sequence';
Các cột quan trọng: name, start_value, increment, minimum_value, maximum_value, is_cycling, is_cached, cache_size, current_value, is_exhausted...