티스토리 뷰

 

 

SQL Server에서 테이블을 통째로 복사하거나, 다른 데이터베이스로 옮겨야 할 일이 종종 생깁니다. 이번 포스트에서는 동일 구조의 테이블 간 Insert, 테이블 전체 복사, 다른 DB로의 복제 등 다양한 상황에 맞춘 실용적인 쿼리를 정리해 보았습니다.

 

 

 


 

 

1️⃣ 동일 구조 테이블 간 Insert (데이터만 복사)

 

기존 테이블 구조가 동일할 경우, 데이터를 그대로 옮길 수 있습니다.

만약 기본키가 IDENTITY로 설정되어 있다면, IDENTITY_INSERT를 허용해주어야 합니다.

-- IDENTITY 값 직접 입력 허용 (id 컬럼이 indentity인 경우)
SET IDENTITY_INSERT A_DB.dbo.tbl_staff ON

INSERT INTO A_DB.dbo.tbl_staff (id, a_id, staff_no)
	SELECT id, a_id, staff_no
	FROM B_DB.dbo.tbl_staff

-- 허용 해제
SET IDENTITY_INSERT A_DB.dbo.tbl_STAFF OFF
✅ 구조가 동일하고, IDENTITY 컬럼을 복사할 경우 꼭 IDENTITY_INSERT 설정 필요

 

 

2️⃣ 테이블 전체 복제

 

■ 테이블이 존재하지 않을 경우 (테이블 자동 생성 + 데이터 복사)

1. 구조 + 데이터 복사

SELECT * INTO NewTable FROM SourceTable

2. 구조만 복사 (데이터 없이)

SELECT * INTO NewTable FROM SourceTable WHERE 1 = 2

3. 구조 + 전체 데이터 복사 (명시적으로)

SELECT * INTO NewTable FROM SourceTable WHERE 1 = 1
🛠️ SELECT INTO 구문은 새 테이블을 자동 생성하므로 동일한 이름의 기존 테이블이 없어야 합니다.

 

 

■ 테이블이 이미 존재하는 경우 (데이터만 복사)

INSERT INTO TargetTable
SELECT * FROM SourceTable
⚠️ 컬럼 순서 및 개수가 정확히 일치해야 합니다.

 

 

3️⃣ 다른 데이터베이스 간 테이블 복사

 

SQL Server에서는 DB명을 포함시켜 참조할 수 있습니다.

-- B_DB의 tbl_staff 테이블을 A_DB로 복사

INSERT INTO A_DB.dbo.tbl_staff
SELECT * FROM B_DB.dbo.tbl_staff
🔄 동일 인스턴스 내의 다른 DB 간 복사도 가능하며, 보안 설정 및 권한에 유의 필요

 

 

4️⃣ 중복 키 에러 방지

 

기본키(Primary Key) 또는 Unique 제약조건이 있는 필드에 중복 데이터가 삽입되면 에러가 발생합니다.

 

MySQL에서는 INSERT IGNORE를 활용할 수 있지만, SQL Server에서는 해당 구문이 지원되지 않습니다. 대신 다음과 같은 방법을 사용할 수 있습니다:

 

방법 1.  WHERE NOT EXISTS 조건 사용

INSERT INTO TargetTable (id, a_id, staff_no)
	SELECT id, a_id, staff_no
		FROM SourceTable s
		WHERE NOT EXISTS (
    		SELECT 1 FROM TargetTable t WHERE t.id = s.id
		)

 

 


 

 

📌 마무리

 

MS-SQL에서 테이블 복제 및 전체 Insert는 생각보다 간단하지만, 아래 사항들을 항상 체크가 필요합니다.

 

  • IDENTITY_INSERT 여부
  • 대상 테이블 존재 여부
  • 컬럼 구조 일치 여부
  • 중복 데이터 처리 로직

 

끝.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함