티스토리 뷰
반응형

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
- 데이터베이스
- mssql
- IOS
- 데이터 리니지
- venv
- 데이터플랫폼
- cursorai
- rockylinux
- AI코딩
- data lineage
- Xcode
- DB
- PostgreSQL
- java배포
- DBMS
- gpt활용
- AnsiSQL
- ChatGPT
- k8s
- sqlserver
- 데이터리니지
- 바이브코딩
- 앱개발
- db운영
- sql
- DATABASE
- 챗gpt
- JSONB
- 테이블복사
- datahub
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함