본문 바로가기

개발/DB

[mssql] 값 자동 증가 identity, 시퀀스(sequence) 생성과 사용법

반응형

 

identity해당 열이 자동으로 값이 증가하도록 설정 할 수 있다.

CREATE TABL]E (

     [컬럼명] [숫자데이터형식] IDENTITY ([초기값][증가값]) [제약조건]

 

컬럼 추가 시 

ALTER TABLE

 [테이블명] 

ADD 

[컬럼명] [숫자형 데이터형식] IDENTITY ([초기값][증가값]) [제약조건]

 

 

1씩 자동으로 증가 하는 테이블 만들기 ( INSERT 문에서 생략 가능) 

CREATE testTable ( id int IDENTITY, name);
GO 
INSERT INTO testTable values('이름');​

IDENTITY에 원하는 값을 직접 입력 하고 싶을때

*주의사항 IDENTITY_INSERT를 ON으로 변경한 테이블은 입력할 열을 꼭 지정해줘야 한다. 생략하면 오류가 난다.

*다시 IDENTITY_INSERT를 OFF로 변경하고 입력하면 ID 값은 최대값+1부터 자동으로 입력될것이다.

SET IDENTITY_INSERT tableTest ON;
GO 
INSERT INTO testTable(id, name) values( 1, '이름');

특정 테이블의 현재 IDENTITY 값을 확인 하는 방법

SELECT IDENT_CURRENT('테이블이름');

 

 

현재 쿼리창에서 가장 최근에 생성된 ID 값을 확인 하는 방법

SELECT @@IDENTITY ;

 

 

시퀀스는 오라클에서 제공한 개체인데 SQL SERVER에서 오라클과 동일한 방식으로 제공하기 위해 SQL SERVER 2012부터 제공된다.

 

시퀀스 만들기

 
CREATE SEQUENCE idSEQ
    START WITH 1
    INCREMENT BY 1;

시퀀스를 입력하려면 NEXT VALUE FOR [시퀀스이름]을 사용한다.

 
INSERT INTO testTable values(NEXT VALUE FOR idSEQ, '', '')

시퀀스가 아닌 다른걸 입력 하고 싶을 때도 입력 가능하다.

INSERT INTO testTable values(15, '', '')

 

 

시퀀스 번호를 다시 설정 해 주고 싶을 때 

INSERT INTO testTable values(15, '', '')
GO
ALTER SEQUENCE idSEQ
    RESTART WITH 12;
GO
INSERT INTO testTable values(NEXT VALUE FOR idSEQ, '', '')

특정 범위의 값을 반복해서 입력 가능

CREATE SEQUENCE idSEQ
    START WITH 10
    INCREMENT BY 10
    MINVALUE 10
    MAXVALUE 50
    CYCLE;
--10, 20, 30, 40, 50, 10, 20.... 반복 해서 나타남
 

 

테이블에 디폴트로 시퀀스 값을 입력하면 시퀀스 표기를 생략해도 자동으로 입력 가능하다 == IDENTITY 와 마찬가지 

CREATE SEQUENCE idSEQ
    START WITH 1
    INCREMENT BY 1;
GO
CREATE TABLE testTB ( 
    id int DEFAULT (NEXT VALUE FOR idSEQ),
    name varchar(3)
);
GO
INSERT INTO testTB (name) value('이름');
 

 

반응형