헤르메스 LIFE

[MSSQL] Sequence 생성 본문

Database

[MSSQL] Sequence 생성

헤르메스의날개 2020. 11. 20. 23:56
728x90

Oracle 에 있던 Sequence 가 MSSQL 에도 있습니다.

MSSQL 2012 버전 이상 부터 지원된다고 합니다.

생성하는 구문은 비슷합니다.


Oracle Sequence 생성

CREATE SEQUENCE 시퀀스명
START WITH 시작값                           /* 시작값의 디폴트값은 증가일때 MINVALUE 감소일때 MAXVALUE */
INCREMENT BY 증감숫자                     /* 양수면 증가 음수면 감소 디폴트는 1 */
NOMINVALUE OR MINVALUE 최소값     /* NOMINVALUE : 디폴트값 설정, 증가일때 1, 감소일때 -1028
                                                          MINVALUE : 최소값 설정, 시작숫자와 작거나 같아야하고
                                                          MAXVALUE보다 작아야함
*/
NOMAXVALUE OR MAXVALUE 최대값   /* NOMAXVALUE : 디폴트값 설정, 증가일때 1027
                                                          감소일때 -1
-- MAXVALUE : 최대값 설정
                                                          시작숫자와 같거나 커야하고 MINVALUE보다 커야함
 */
CYCLE OR NOCYCLE                           /* CYCLE 설정시 최대값에 도달하면 최소값부터 다시 시작
                                                          NOCYCLE 설정시 최대값 생성 시 시퀀스 생성중지
*/
CACHE OR NOCACHE                         /* CACHE 설정시 메모리에 시퀀스 값을 미리 할당하고
                                                          NOCACHE 설정시 시퀀스값을 메로리에 할당하지 않음 */

MSSQL Sequence 생성

CREATE SEQUENCE 시퀀스명
AS
START WITH 시작값                           /* 시작값의 디폴트값은 증가일때 MINVALUE 감소일때 MAXVALUE */
INCREMENT BY 증감숫자                    /* 양수면 증가 음수면 감소 디폴트는 1 */
MINVALUE 최소값                             /* NOMINVALUE : 디폴트값 설정, 증가일때 1, 감소일때 -2147483648
                                                        MINVALUE : 최소값 설정, 시작숫자와 작거나 같아야하고 
                                                        MAXVALUE보다 작아야함
 */ 
MAXVALUE 최대값
                           /*
 NOMAXVALUE : 디폴트값 설정, 증가일때 2147483647
                                                        감소일때 -1
 -- MAXVALUE : 최대값 설정
                                                        시작숫자와 같거나 커야하고 MINVALUE보다 커야함
  */
CYCLE OR NOCYCLE                         /* CYCLE 설정시 최대값에 도달하면 최소값부터 다시 시작
                                                       NOCYCLE 설정시 최대값 생성 시 시퀀스 생성중지
 */
CACHE OR NOCACHE                       /* CACHE 설정시 메모리에 시퀀스 값을 미리 할당하고
                                                        NOCACHE 설정시 시퀀스값을 메로리에 할당하지 않음 */

Oracle Sequence 사용

SELECT 시퀀스명.NEXTVAL FROM DUAL;                /* 다음 순번값 조회 */
SELECT 시퀀스명.CURRVAL FROM DUAL;                /* 현재 순번값 조회 */

MSSQL Sequence 사용

SELECT NEXT VALUE FOR 시퀀스명 FROM DUAL;      /* 다음 순번값 조회 */

/* 테스트 테이블생성 */
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
728x90