상세 컨텐츠

본문 제목

[MSSQL] 테이블을 복사하는 방법 4가지 예제

SQL

by 자기 2022. 10. 21. 14:01

본문

728x90

테이블을 그대로 다른 이름의 테이블로 복사하는 방법 4가지를 예제를 통해 알아보겠습니다.

 

 

 

 

A테이블에서 B테이블로 테이블의 스키마, 데이터 등 여러가지 방법으로 복사하는 방법이 존재하므로 귀찮게 create 문으로 새 테이블을 생성해서 데이터를 복사하는 것은 매우 비효율적입니다.

[테이블을 복사하는 4가지 Case]
1) 새 테이블 생성 + 데이터 복사
2) 테이블만 복사 + 데이터 제외
3) 기존 테이블에 + 전체 데이터 복사
4) 기존 테이블에 + 특정 데이터 복사

새 테이블 생성 + 데이터 복사

새 테이블을 생성하고 동시에 원본 테이블로부터 모든 데이터를 새 테이블에 복사해 줍니다.

구문)

SELECT *
INTO 복사할 새 TABLE명
FROM 원본 TABLE명

예제)

SELECT *
INTO CS_CODE_COPY
FROM CS_CODE

 

 

 

테이블만 복사 + 데이터 제외

새 테이블을 생성하지만 데이터는 복사하지 않습니다.

WHERE 조건절을 추가하여 1=2 라는 조건을 걸었으므로

조건에 부합하는 데이터가 없어서 복사할 데이터가 없게 됩니다.

구문)

SELECT *
INTO 복사할 새 TABLE명
FROM 원본 테이블명
WHERE 1 = 2

예제)

SELECT *
INTO CS_CODE_COPY
FROM CS_CODE
WHERE 1 = 2

 

 

 

3) 기존 테이블에 + 전체 데이터 복사

새 테이블을 생성하지 않고 기존의 스키마가 동일한 테이블에

데이터만 복사해 줍니다.

기존 테이블이 존재하지 않을 경우 에러가 발생합니다.

구문)

INSERT
INTO 복사할 기존 TABLE명
SELECT *
FROM 원본 테이블명
또는 ('can only be specified when a column list is used and IDENTITY_INSERT is ON' 에러 발생 시)
INSERT (col1, col2, col3, ......)
INTO 복사할 기존 TABLE명
SELECT *
FROM 원본 테이블명

예제 1)

INSERT
INTO CS_CODE_COPY
SELECT *
FROM CS_CODE

예제 2)

예제 1의 방법을 사용했는데

'can only be specified when a column list is used and IDENTITY_INSERT is ON' 에러 발생 시에는 아래와 같이 컬럼명을 명시적으로 써 주면 됩니다.

INSERT
INTO CS_CODE_COPY (NO,GROUPCODE,CODE,NAME,CONDITION1,CONDITION2,CONDITION3,REMARK,USEYN)
SELECT *
FROM CS_CODE
 

 

 

 

4) 기존 테이블에 + 특정 데이터 복사

새 테이블을 생성하지 않고 기존의 스키마가 동일한 테이블에

조건절 where를 이용하여 특정데이터만 복사해 줍니다.

기존 테이블이 존재하지 않을 경우 에러가 발생합니다.

구문)

INSERT
INTO 복사할 기존 TABLE명
SELECT *
FROM 원본 테이블명
WHERE 조건
또는 ('can only be specified when a column list is used and IDENTITY_INSERT is ON' 에러 발생 시)
INSERT (col1, col2, col3, ......)
INTO 복사할 기존 TABLE명
SELECT *
FROM 원본 테이블명
WHERE 조건

예제 1)

INSERT
INTO CS_CODE_COPY
SELECT *
FROM CS_CODE
WHERE GROUPCODE = 'model'

예제 2)

예제 1의 방법을 사용했는데

'can only be specified when a column list is used and IDENTITY_INSERT is ON' 에러 발생 시에는 아래와 같이 컬럼명을 명시적으로 써 주면 됩니다.

INSERT
INTO CS_CODE_COPY (NO,GROUPCODE,CODE,NAME,CONDITION1,CONDITION2,CONDITION3,REMARK,USEYN)
SELECT *
FROM CS_CODE
WHERE GROUPCODE = 'model'

🚥 테이블 복사 시 테이블 구조만 동일하게 생성되고 index는 생성되지 않습니다.

728x90

관련글 더보기

댓글 영역