2014년 5월 12일 월요일

IDENTITY열은 UPDATE가 되나요?

테스트를 위해 IDENTITY열을 포함한 테이블을 하나 만듭니다.
CREATE TABLE TBL1 (COL1 INT IDENTITY(1,1), COL2 DATETIME)
이 테이블에 데이터를 3건 집어 넣습니다.
INSERT INTO TBL1 (COL2) SELECT GETDATE()
GO 3
데이터는 다음과 같습니다.
COL1    COL2
1       2014-05-12 12:13:20.727
2       2014-05-12 12:13:20.740
3       2014-05-12 12:13:20.747
IDENTITY가 3까지 증가하였습니다. 여기에 임의로 IDENTITY값 4를 가진 데이터를 추가하려면 IDENTITY_INSERT ON을 사용합니다.
SET IDENTITY_INSERT TBL1 ON
GO
INSERT INTO TBL1 (COL1, COL2) SELECT 4, GETDATE()
GO
SET IDENTITY_INSERT TBL1 OFF
결과는 다음과 같습니다.
COL1    COL2
1       2014-05-12 12:13:20.727
2       2014-05-12 12:13:20.740
3       2014-05-12 12:13:20.747
4       2014-05-12 12:15:46.210
이번에는 IDENTITY열을 수정해보겠습니다.
UPDATE TBL1 SET COL1 = 5 WHERE COL1 = 1
이 문장을 수행했더니 다음과 같은 에러가 발생했습니다.
메시지 8102, 수준 16, 상태 1, 줄 1
ID 열 'COL1'을(를) 업데이트할 수 없습니다.
무엇을 잘못했을까요?? 아하!! IDENTITY_INSERT를 설정하지 않았군요. 이번엔 이렇게 해보겠습니다.
SET IDENTITY_INSERT TBL1 ON
GO
UPDATE TBL1 SET COL1 = 5 WHERE COL1 = 1
GO
SET IDENTITY_INSERT TBL1 OFF
역시나 마찬가지로 다음의 에러가 발생합니다.
메시지 8102, 수준 16, 상태 1, 줄 1
ID 열 'COL1'을(를) 업데이트할 수 없습니다.
혹시나 IDENTITY_UPDATE가 있는지 살펴보았지만 그런건 없습니다. 결론은 IDENTITY열의 UPDATE는 안됩니다.

댓글 없음:

댓글 쓰기