프로그래밍/DB

[DB] MSSQL 시퀀스(Sequence)생성방법

ss-pro 2021. 1. 2. 00:56
반응형

시퀀스란 무엇일까요? 말 그대로 숫자값의 순서를 부여하는것을 의미하며 지정된 간격으로 오림차순 또는 내림차순으로로 숫자를 부여할수 있습니다. MSSQL의 경우 시퀀스를 2012버전이상부터 지원하고 있으며 IDENTITY필드열과 동일한 기능으로 동작한다고 보시면됩니다. 시퀀스의 경우 어플리케이션에서 시퀀스 개체를 참조하여 처리합니다. 

1. 시퀀스 생성방법 
1부터 1씩증가하는 정수값을 만드는 시퀀스를 생성해보겠습니다. 

1
2
3
4
5
CREATE SEQUENCE [dbo].[DailySEQ] 
    AS [int]
    START WITH 1
    INCREMENT BY 1
GO

START WITH 1  :  1번값으로 시작한다는 의미입니다.
INCREMENT BY 1 : 1씩증가한다는 의미입니다. 
시퀀스가 정상적으로 만들어지면 아래와 같이 프로그램 기능항목의 시퀀스에 생성한 스퀀스정보가 만들어진것을 확인할수 있습니다.

2. 시퀀스 번호가져오기 :  NEXT VALUE FOR
NEXT VALUE FOR를 이용해서 다음시퀀스값을 가져올수 있습니다. 

1
2
3
DECLARE @seqID int
set @seqID = NEXT VALUE FOR dbo.DailySEQ
PRINT @seqID

3. 시퀀스 사용사례 
일단위로 시퀀스를 부여하고 싶은경우가 있을겁니다. 00시에 초기화 해서 1번부터 다시시작해야될경우 시퀀스를 사용하면 편리하게 해당부분을 구현할수 있습니다. 서버프로그램에서 특정열에 값을 저장할때 해당시퀀스번호를 참조하여 데이터를 처리하고 00시 시점에 초기화한다음 값을 저장하면 되겠죠.

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
/* 테스트 테이블생성 */
CREATE Table SeqTestTable
(
    SeqID int identity (1,1),
    registDateTime datetime,
    dailyID int        
)
GO
 
/* 1/1일데이터 저장 */
insert into SeqTestTable(registDateTime,dailyID) values ('2020-01-01',NEXT VALUE FOR dbo.DailySEQ)
insert into SeqTestTable(registDateTime,dailyID) values ('2020-01-01',NEXT VALUE FOR dbo.DailySEQ)
insert into SeqTestTable(registDateTime,dailyID) values ('2020-01-01',NEXT VALUE FOR dbo.DailySEQ)
insert into SeqTestTable(registDateTime,dailyID) values ('2020-01-01',NEXT VALUE FOR dbo.DailySEQ)
insert into SeqTestTable(registDateTime,dailyID) values ('2020-01-01',NEXT VALUE FOR dbo.DailySEQ)
 
/* 시퀀스번호 다시 설정*/
ALTER SEQUENCE dbo.DailySEQ 
RESTART WITH 1 ;
 
/* 1/2일데이터 저장 */
insert into SeqTestTable(registDateTime,dailyID) values ('2020-01-02',NEXT VALUE FOR dbo.DailySEQ)
insert into SeqTestTable(registDateTime,dailyID) values ('2020-01-02',NEXT VALUE FOR dbo.DailySEQ)
 
select * from SeqTestTable

쿼리결과