공부/DB 2012. 1. 5. 16:05

오라클의 시퀀스와 같은 기능을 MS SQL을 찾으려고 한다면,

Identity를 말할 수 있다.

 

 

 

 

Identity 선언

 

create table test

(

 num int Identity not null primary key, -- num컬럼을 identity로 설정

 corp_nm varchar(30)

)

 

 

 

 

Identity 를 강제로 입력

 

Identity를 설정해 놓은 컬럼은 계속해서 값이 증가된다.

중간값이 있는 행을 삭제하더라고 새로 들어온 값이 중간값으로 들어오지 않는다.

 

예) table :  dbo.test

 

idx nm
1 rara
2 caca
3 asas
4 erer
5 wtwt

<그림 1>

 

<그림 1> 같은 상황에서idx가 3인 asas를 지우고 새로운 값을 인서트 한다면 <그림 2> 같이 된다.

 

idx nm
1 rara
2 caca
4 erer
5 wtwt
6 xdxd

<그림 2>

 

만약 여기에 idx가 3인 행을 넣고 싶다면 강제로 입력을 해 주어야 한다.

 

 

SET IDENTITY_INSERT dbo(스키마명).test(테이블명) on

 

insert into dbo.test(idx, nm) values (3,'papa')

 

SET IDENTITY_INSERT dbo(스키마명).test(테이블명) off

 

 

※ off 한 상태에서 identity 값까지 입력할 경우 에러메시지가 뜬다.

 

IDENTITY_INSERT가 OFF로 설정되면 테이블 'test'의 ID 열에 명시적 값을 삽입할 수 없습니다.

 

 

 

※ 강제 입력후에는 반드시 off 해 주어야 한다.

on인상태에서 일반적인 인서트를 하게 되면 에러메시지가 뜬다.

 

ex) insert into dbo.test(nm) values ('papa')


IDENTITY_INSERT가 ON으로 설정되거나 복제 사용자가 NOT FOR REPLICATION ID 열에 삽입할 때 테이블 'test'의 ID 열에 명시적 값을 지정해야 합니다.

 

 

idx nm
1 rara
2 caca
4 erer
5 wtwt
6 xdxd
3 papa

<그림 3>

 

 

 

 

Identity 초기화

 

DBCC CHECKIDENT (table이름, RESEED, 설정하고자 하는 초기값)

※ table이름에 스키마나 DB명 쓰지 마세요.

 

ex) DBCC CHECKIDENT (test, RESEED, 0)

출처 :  http://blog.naver.com/nkind?Redirect=Log&logNo=110093906926

'공부 > DB' 카테고리의 다른 글

sql 간단 명령어 정리 링크  (0) 2012.02.22
sql 문자열 정리 홈페이지  (0) 2012.01.31
집합 쿼리(UNION, INTERSECT, MINUS)  (0) 2012.01.25
각각 디비 시퀀스 생성  (0) 2012.01.05
[오라클 db]시퀀스  (0) 2012.01.04
posted by 나무사이
: