오라클의 시퀀스와 같은 기능을 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')
|
idx | nm |
1 | rara |
2 | caca |
4 | erer |
5 | wtwt |
6 | xdxd |
3 | papa |
Identity 초기화
DBCC CHECKIDENT (table이름, RESEED, 설정하고자 하는 초기값)
※ table이름에 스키마나 DB명 쓰지 마세요.
ex) DBCC CHECKIDENT (test, RESEED, 0)
출처 : http://blog.naver.com/nkind?Redirect=Log&logNo=110093906926
[출처] MS SQL의 시퀀스인 identity|작성자 깨죽
'공부 > 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 |