본문 바로가기

MS-SQL

MSSQL 일련번호는 시퀀스(Sequence)를 사용하자.

MSSQL2012 부터 시퀀스(Sequence)를 지원하게 되었습니다. 일반적으로 숫자로 된 일련번호를 생성할 때 쉽게 생각해 볼 수 있는 방법은 테이블에서 가장 큰 수를 가져와 +1 하는 것일 것입니다. 쿼리로 보자면 다음과 같습니다.

SELECT MAX(Seq) + 1 FROM Table

이 방법은 사용자가 1명일 경우는 문제가 없겠지만 다수의 사용자가 번호를 따는 상황이라면 중복이 발생할 수 있습니다. 즉, 이러한 방식의 번호따기는 언제든 문제가 발생할수 있다는 것이죠. 이 때 사용할 수 있는 기능이 시퀀스(Sequence)입니다. 시퀀스를 사용하면 프라이머리 키로 사용할 수 있는 유니크한 자동 증가번호를 딸 수있습니다.

1. 시퀀스의 생성

DB>프로그램기능>시퀀스>새시퀀스 생성

2. 옵션 설명

시작값 : 1 (번호가 1부터 시작)

증가값 : 1 (1씩 증가)

최소값 : 1 (시퀀스가 최대값에 도달하면 어떤 숫자에서 시작할지)

최대값 : 9999 (9999에 도달하면 다음은 최소값을 리턴)

사이클 : 최소값과 최대값을 반복할지의 여부(루핑)

캐시옵션

    - 디폴트 사이즈 : 서버가 메모리에 미리 불러다 놓는 시퀀스 값의 갯수, 시스템 성능에 도움을 줌 디폴트 값은 50

                           (서버 재부팅시 캐시에 불러들인값은 날아감)

    - 사용하지 않음 : 캐시 사용않음

    - 캐시사이즈 : 직접지정

3.쿼리를 통한 시퀀스의 생성, 수정, 삭제

--시퀀스 생성
CREATE SEQUENCE [dbo].[SEQ]
AS BIGINT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999
CYCLE
CACHE 50 -- 1이면 NOCACHE

--시퀀스 수정
ALTER SEQUENCE [dbo].[SEQ]
RESTART WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999
CYCLE
CACHE 50 -- 1이면 NOCACHE

--시퀀스 삭제
DROP SEQUENCE [dbo].[SEQ]

4. 시퀀스의 사용 예제

--시퀀스를 다섯번 불러봄
SELECT NEXT VALUE FOR SEQ
SELECT NEXT VALUE FOR SEQ
SELECT NEXT VALUE FOR SEQ
SELECT NEXT VALUE FOR SEQ
SELECT NEXT VALUE FOR SEQ

4. 시퀀스 버그

시퀀스의 사용에서 주의할 점은 MS-SQL 2012, MS-SQL 2014 버전에서 버그가 발생할 수있다는 것입니다. 이 버그는 숫자가 더이상 증가하지 않고 동일한 번호를 리턴하게 되는 버그인데 업데이트를 통해 해결할 수 있습니다.

MS-SQL 2012 : SP2 누적업데이트 4에서 해결됨 

MS-SQL 2014 : 누적업데이트 6에서 해결됨

 

자세한 내용은 MSDocs를 참고하세요.

 

프로젝트의 성공을 기원합니다.

 

 

'MS-SQL' 카테고리의 다른 글

MSSQL 프로시저 텍스트 검색  (0) 2019.04.19
MSSQL 날짜 변환, CONVERT()함수의 활용  (0) 2019.04.13
MSSQL 게시판 글번호 매기기  (0) 2019.04.07
MSSQL 버전확인  (0) 2019.02.15
MSSQL 초간단 팁들  (0) 2019.02.02