티스토리 뷰
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 여부
- 대상 테이블 존재 여부
- 컬럼 구조 일치 여부
- 중복 데이터 처리 로직
끝.
'IT Lab > Database' 카테고리의 다른 글
[데이터 리니지] 2. 분석계 데이터가 많아질수록 데이터 리니지가 필요한 이유 (0) | 2025.08.02 |
---|---|
[데이터 리니지] 1. AI 시대, 데이터 리니지의 중요성 (0) | 2025.08.02 |
[DB 실무] DBeaver로 데이터베이스 간 테이블 복사하기 (1) | 2025.07.09 |
[PostgreSQL] 운영자를 위한 필수 쿼리 모음 (0) | 2025.06.01 |
[MS-SQL] 임시 테이블(Temporary Table) 생성 및 삭제 (2) | 2024.09.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 가상환경
- venv
- datahub
- springboot
- AI코딩
- rockylinux
- 데이터리니지
- ChatGPT
- sqlserver
- jar
- java배포
- cursorai
- k8s
- PostgreSQL
- DBeaver
- 데이터 리니지
- data lineage
- 데이터플랫폼
- db운영
- DATABASE
- gpt활용
- DB
- 챗gpt
- mssql
- 테이블복사
- AX
- Kubernetes
- backend
- sql
- vscode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함