
MSSQL #IDENTITY_INSERT #ID열의 명시적 값 #IDENTITY_INSERT가 ON일 때 #MSSQL오류 #해결방법 #꿀팁
포스팅 목차 바로가기
안녕하세요, 배곧동개발자 입니다.
1. 오류
테이블에 새로운 row를 넣고 싶은데 ID값이 설정되어 있는 경우 아래와 같이 오류가 나서 insert가 안되지요.

ID 열의 명시적 값은 열 목록이 사용되고 IDENTITY_INSERT가 ON일 때만 지정할 수 있습니다.
하지만, 나는 넣고 싶다 이거야. 그럴땐 어떻게 하냐?
2. 원인
위에 설명했듯이 내가 insert를 하고 싶은 테이블에 id값이 설정되어 있으면 저렇게 에러가 뜹니다.

그렇다고 ID사양 설정을 풀순 없고, 심지어 insert 칠 때마다 풀어야 한다? 큰일납니다.
3. 해결방법
그렇다면 어떻게 해야하나? 아주 간단하게 쿼리의 앞뒤에 한줄씩 추가해주시면 됩니다.
SET IDENTITY_INSERT 테이블명 ON
SET IDENTITY_INSERT 테이블명 OFF
요거를 써서 값을 넣을 수 있지요. 바로 이렇게요.
SET IDENTITY_INSERT TBL_A ON
insert into TBL_A
select * from TBL_B
SET IDENTITY_INSERT TBL_A OFF
자. 저는 분명 이렇게 배웠어요. 그래서 직접 해봤는데

응? 똑같이 안되는데? 인터넷엔 이 방법 뿐이 없는데?
찾고 찾고 또 찾다보니 이렇게 된 이유는 바로! 컬럼이 명시되지 않아서였어요.
SET IDENTITY_INSERT TBL_A ON
insert into TBL_A(a,b,c,d)
select a,b,c,d from TBL_B
SET IDENTITY_INSERT TBL_A OFF
이렇게 한땀한땀 컬럼을 다 입력해주고 쿼리를 실행해보면?

짜잔- 컬럼을 다 써줘야 하는것이였어요. 좀 답답하긴 하지만! 해결방법을 찾았다는거에 의의를 둡시다!
이만, 배곧동개발자 이였습니다.