반응형
시퀀스(Sequence)
숫자 값으로 지정된 간격으로 오름차순 또는 내림차순으로 생성되며 요청된 경우 순환(반복) 할 수 있음.
시퀀스는 테이블에 연결되어 있지 않고, 행을 삽입하면 생성되는 ID 열 값과 달리 애플리케이션에선 NEXT VALUE FOR 함수를 호출하여 행을 삽입하기 전에 다음 시퀀스 번호를 가져올 수 있음
데이터 형식을 지정하지 않으면 Bigint가 기본값
시퀀스 사용
- 테이블에 삽입 전에 번호가 필요할 때
- 여러 테이블 또는 테이블 내의 여러 열 사이에 단일 번호를 공유해야 하는 경우
- 지정된 번호에 도달하면 번호를 다시 시작해야 하는 경우
- 시퀀스 값을 다른 필드를 기준으로 정렬해야 하는 경우
next value for 함수는 함수 호출에 over 절을 적용할 수 있음
over 절을 사용하면 반환된 값이 over 절의 order by 절 순에 따라 생성 - 여러 번호를 동시에 할당해야 하는 경우
- 증분 값 등 시퀀스 사양을 변경해야 하는 경우
주의점
값을 변경할 수 없는 ID 열과 달리 시퀀스 값은 테이블이 삽입된 이후에 자동으로 보호되지 않음.
트랜잭션으로 묶어도 시퀀스 번호는 증가됨(롤백, 커밋과 관계없음)
시퀀스 데이터 형식
- tinyint 0 ~ 255
- smallint -32,768 ~ 32,767
- int -2,147,483,648 ~ 2,147,483,647
- bigint -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
-- Create a table
CREATE TABLE Test.Orders
(
OrderID int PRIMARY KEY,
Name varchar(20) NOT NULL,
Qty int NOT NULL
);
GO
-- Create a sequence
CREATE SEQUENCE Test.CountBy1
START WITH 1
INCREMENT BY 1;
GO
INSERT Test.Orders (OrderID, Name, Qty)
VALUES (NEXT VALUE FOR Test.CountBy1, 'Tire', 2) ;
-- 테이블 생성시 시퀀스 연결
CREATE TABLE Audit.ProcessEvents
(
EventID int PRIMARY KEY CLUSTERED DEFAULT (NEXT VALUE FOR Audit.EventCounter),
EventTime datetime NOT NULL DEFAULT (getdate()),
EventCode nvarchar(5) NOT NULL,
Description nvarchar(300) NULL
);
-- 반복되는 시퀀스
CREATE SEQUENCE CountBy5 AS tinyint
START WITH 1 -- 시작 값
INCREMENT BY 1 -- 증가값
MINVALUE 1 -- 최소값
MAXVALUE 5 -- 최대값
CYCLE ; -- 제한에 도달하면 시퀀스 순환 다시 시작
GO
-- over 구분
SELECT NEXT VALUE FOR Samples.IDLabel OVER (ORDER BY Name) AS NutID, ProductID, Name, ProductNumber
FROM Production.Product
WHERE Name LIKE '%nut%'
;
-- 번호 다시 설정
ALTER SEQUENCE Samples.IDLabel
RESTART WITH 1 ;
|
cs |
반응형
'IT > MSSQL' 카테고리의 다른 글
MSSQL 숫자형 자료형 c# 자료형과 비교 (0) | 2023.06.23 |
---|---|
MSSQL 디스크 기반의 인덱스 디자인 가이드 (0) | 2023.06.23 |
MSSQL 디스크 기반의 인덱스 설명 (0) | 2023.06.23 |
MSSQL DATETIME 날짜 기간 검색 (0) | 2023.06.23 |
MSSQL DATETIME 특정 날짜 구하기 (0) | 2023.06.23 |
댓글