ID 열이 있는 테이블에 데이터 로드

처음의 두 INSERT 문은 새 행에 대해 ID 값을 생성할 수 있습니다.
세 번째 INSERT 문은 SET IDENTITY_INSERT 문으로 열에 대한 IDENTITY 속성을 덮어쓰고
ID 열에 명시적인 값을 삽입합니다.

IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_NAME = 'T1')
   DROP TABLE T1
GO
CREATE TABLE T1 ( column_1 int IDENTITY, column_2 varchar(30))
INSERT T1 VALUES ('Row #1')
INSERT T1 (column_2) VALUES ('Row #2')
SET IDENTITY_INSERT T1 ON 
INSERT INTO T1 (column_1,column_2) 
   VALUES (-99,'Explicit identity value')
SELECT * FROM T1



테이블에 IDENTITY가 걸려 있는 컬럼에 데이터를 삽일 할때는

SET IDENTITY_INSERT [Table Name] ON

문을 사용 하여 IDENTITY 속성을 비활성화 시켜 줘야 컬럼에 명시적인 값 삽입이 가능하다.

DB작업 중에 테이블 컬럼의 데이터 형을 바꾸는 작업이 있었는데 데이터 형을 바꾸면서

여러가지 계산에 필요 한 값들을 같이 테이블에 컬럼을 추가 하여 데이터를 넣게 되었는데

이때 기존 테이블에서의 작업은 문제가 있어서 테이블을 새로 생성 하고 데이터를 복사 후

데이터 형변환 계산 후 계산에 필요 한 데이터 컬럼과 기존 데이터 값 컬럼을 삭제 하고

새로 만든 컬럼의 이름과 테이블의 이름을 예전 테이블과 컬럼의 이름으로 변경 하는

작업으로 진행이 되었다.


그런데 여기서 문제가 하나 발생 하였는데 ID값으로 들어가는 데이터가 변경이 되면 안되는

상황 이었는데 그 컬럼에는 IDENTITY가 걸려 있어야 했기 때문에 우선 그 테이블을 생성 할때

IDENTITY 를 뺀 상태에서 테이블 생성한 후 데이터 복사 그리고 컬럼 이름 등의 변경 작업 후

IDENTITY를 추가 하려고 하니 데이터가 들어있는 상태에서는 IDENTITY를 추가 할 수 없는

상황이 되어버렸다. 그래서 Enterprise Manager의 테이블 디자인에서 ID값을 활성화 해서 

문제를 해결 할 수 있었다.


하지만 SET IDENTITY_INSERT 문을 사용 했다면

처음에 테이블 생성 과정에서 굳이 IDENTITY를 빼지 않아도 ID값을 명시 적으로 넣을 수 있었기

때문에 추가 적인 작업이 필요 없었을 것이다.

그리고 SET IDENTITY_INSERT 문을 사용 하지 않는 방법은

종종 새로 테이블을 생성하고 데이터 복사 후 테이블 이름을 이전 테이블 이름으로 교체 후

IDENTITY를 추가 하지 않아서 프로시저 등에서 오류가 발생 하기 도 해서 주의가 필요하다.

'SQL' 카테고리의 다른 글

컬럼 Default 값 수정 쿼리  (0) 2010.02.10
xp_cmdshell 사용  (2) 2009.08.12
xp_cmdshell (MS SQL Server 2005)  (0) 2009.08.12
sp_configure xp_cmdshell 옵션  (0) 2009.08.12
SQL Server 2005 서버 구성 옵션 설정  (0) 2009.08.12
Posted by ProjectGhost
BLOG main image
by ProjectGhost

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :