[MSSQL] 시퀸스 생성 및 적용 & 테이블 IDENTITY 추가





테이블에 ID값을 주기위해서 MSSQL에서는 시퀸스 사용과  IDENTITY 속성 부여하는 방법이 있습니다.

두 가지 방법의 차이점은 TABLE의 COLUMN에 직접적인 속성을 부여하는 IDENTITY는 과정 그대로, TABLE에 종속적인 증감값을 부여합니다.

그러나, 시퀸스의 경우 값을 INSERT하는 개념(?)으로 테이블과의 종속성이 없습니다.

아래 예제들을 통해 확인해 보겠습니다.


❊ [SEQUENCE]


1. 시퀸스 생성

/*  ##  시퀸스 생성  ##  */ 
CREATE SEQUENCE SEQ_TEST_1 AS DECIMAL(20, 0)
START WITH 1   -- 시작값
INCREMENT BY 1  -- 증감(+,-) 수치
MINVALUE 1   -- 최소값
MAXVALUE 1000   -- 최대값
CYCLE    -- 순환 여부
CACHE 1   -- 1: NO CACHE / (2 ~ ) : CACHE 크기


2. 시퀸스 값 증가

SELECT NEXT VALUE FOR SEQ_TEST_1

 설정한 증감값(+,-)에 따라 시작값부터 증감값을 반환합니다.


3. 시퀸스 테이블 적용 예제

BEGIN
 
 -- 샘플 테이블에 시퀸스값 삽입
 INSERT INTO [dbo].[TB_SAMPLE_1] (ID, CONTENTS) 
 SELECT NEXT VALUE FOR SEQ_TEST_1 AS ID,
   'TEST_CONTENTS' AS CONTENTS

 SELECT * FROM [dbo].[TB_SAMPLE_1]

END


" INSERT ~ SELECT " 구문을 이용해 ID 컬럼에 증감된 시퀸스 값을 INSERT하는 예제입니다.
3번 실행한 쿼리 결과는  위 그림과 같이 ID가 증감값 설정 처럼 1씩 증가한 모습을 보입니다.

그러나, " 2. 시퀸스 값 증가 " 쿼리를 실행 후 다시 위 쿼리를 실행 시킨다면 어떻게 될까요?

[①시퀸스 증가]

[②예제 쿼리 실행]

 " ①시퀸스 증가 " 처럼 외부에서 시퀸스 값을 증가 시킨 후 " ②예제 쿼리 실행 "의 결과입니다. 


당연한 현상이지만 결과적으로 시퀸스가 테이블과의 종속성이 없음을 확인 할 수 있었습니다. 




4. (참고) 시퀸스 값 재설정 - 초기화

ALTER SEQUENCE SEQ_TEST_1 RESTART WITH 1

3번 처럼 변경된 값들을 재설정하고 싶은 경우 위 쿼리를 사용해줍니다.


시퀸스와 비슷한 기능을 하는 테이블 종속적인 IDENTITY 기능이 있습니다.


❊ [IDENTITY]


1. IDENTITY 컬럼 추가 및 속성 부여

ALTER TABLE TB_SAMPLE_2 ADD SEQ INT IDENTITY(1,1);

IDENTITY의 증감값을 저장할 컬럼("SEQ")를 추가하고, SEQ 컬럼에 IDENTITY 속성을 부여하는 쿼리입니다.
인자는 IDENTITY (시작값, 증감값) 입니다.


2. IDENTITY 테이블 적용 예제

BEGIN

 INSERT INTO [dbo].TB_SAMPLE_2 (ID, CONTENTS) 
 SELECT 
   'TEST_ID' AS ID,
   'TEST_CONTENTS' AS CONTENTS

 SELECT * FROM [dbo].TB_SAMPLE_2

END


IDENTITY를 별도로 언급하지 않더라도 INSERT 구문을 통해 값이 들어갈 때 지정한 SEQ 컬럼에 IDENTITY 증감값이 적용되는 모습입니다.

여기서 한 가지 주의할 점!

테이블의 데이터를 모두 DELETE하더라도 SEQ는 초기화 되지 않습니다.

따라서 별도의 IDENTITY 초기화(재설정) 과정이 필요합니다.





3. IDENTITY 초기화 (재설정)

DBCC CHECKIDENT (TB_SAMPLE_2, RESEED, 0)

인자값은 ([테이블명], RESEED, [시작값]) 입니다.



0 댓글