SQL Error [8101] [S0001]: 테이블 'OOO'에 있는 ID 열의 명시적 값은 열 목록이 사용되고 IDENTITY_INSERT가 ON일 때만 지정할 수 있습니다.

Auto Increment 설정이 되어있는데 값을 임의로 넣으려 할 때 발생하는 에러다.

다음과 같이 ON/OFF를 통해 해결한다.

 

1. 테이블에 직접 Insert 시

-- 1. 쓰기 작업 켜기
SET IDENTITY_INSERT 테이블명 ON;

-- 2. 값 입력하기
INSERT INTO 테이블명
(IDX, 컬럼1, 컬럼2)
VALUES(1, 값1, 값2);

-- 3. 쓰기작업 끄기
SET IDENTITY_INSERT 테이블명 OFF;

 

2. 테이블 복사시

-- 1. 쓰기 작업 켜기
SET IDENTITY_INSERT 타겟테이블명 ON;

-- 2. 값 입력하기
INSERT INTO 타겟테이블명
(IDX, 컬럼1, 컬럼2)
SELECT *
FROM 원본테이블명 origin
WHERE origin.IDX > 500;

-- 3. 쓰기작업 끄기
SET IDENTITY_INSERT 타겟테이블명 OFF;

주의 : 일반적으로 테이블 복사할 때 처럼 '*'을 써서 하면 에러가 발생한다. 컬렴명을 명시적으로 넣어주도록 한다.

INSERT INTO 타겟테이블명
SELECT *
FROM 원본테이블명 origin
WHERE origin.IDX > 500;

이걸 그대로 쓰면 에러남, 아래와 같이 명시해준다.

INSERT INTO 타겟테이블명 
(IDX, 컬럼1, 컬럼2)
SELECT *
FROM 원본테이블명 origin
WHERE origin.IDX > 500;

 

참고로 DBeaver 기준, 1~3 단계는 각각 쿼리를 실행하지 않고 ';'로 종료를 구분지어 3개의 쿼리를 작성한 다음 드래그하고 한 번에 실행하면 된다.

 

Tag. 다중쿼리, 쿼리 여러줄, 복수 쿼리, 쿼리 다중, 쿼리 다중 실행, 쿼리 다중실행, 쿼리 복수 실행

'개발자 > Database & SQL' 카테고리의 다른 글

SQL 실행 순서  (0) 2021.01.07
DBeaver SQL 키워드 자동 대문자  (0) 2020.12.30
SQL View 만들기  (0) 2020.12.29
SQL 마지막 날짜 데이터만 가져오기  (0) 2020.12.24
SQL 변수 사용에 따른 속도  (0) 2020.12.23

+ Recent posts