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 |