회사 일 하다가 대용량 데이터를 수정할 일이 있어서 혹시나 하는 마음에.. 😵💫
테이블복사하면서 데이터, 제약조건을 복사하려고 하는데
그냥 SELECT INTO 쓰면 제약조건은 복사 안 되고...
그래서 공부 겸 정리해봤어요! 🤓💪
✅ 목표
기존 테이블을 완전히 복사할 거예요.
- 테이블 구조 ✅
- 제약조건 (Primary Key, Foreign Key, Index 등) ✅
- 데이터 ✅
👉 복사하고 싶은 테이블: Employee
👉 복사본 테이블 이름: Employee_Copy
📌 Step 1. 테이블 스크립트 추출 (구조 복사용)
- SSMS에서 복사할 테이블 Employee 찾기
- 테이블에 우클릭 → Script Table As → CREATE To → New Query Editor Window
(한글이면: 테이블 스크립팅 → CREATE TO → 새 쿼리 편집기 창)
📝 이러면 CREATE TABLE Employee 전체 쿼리가 자동 생성돼요!
📌 Step 2. 복사 테이블 이름 바꾸기
- CREATE TABLE [dbo].[Employee]
👉 CREATE TABLE [dbo].[Employee_Copy] 로 변경! - 제약조건 이름도 꼭 바꿔주세요!
예: PK_Employee → PK_Employee_Copy
(안 바꾸면 "이미 있습니다" 오류 나요 ❌)
📌 Step 3. 수정한 CREATE 쿼리 실행
🖱 수정 다 했으면 F5 눌러서 실행!
→ Employee_Copy 테이블이 생겼어요 (제약조건 포함)
📌 Step 4. 데이터 복사하기
INSERT INTO Employee_Copy
SELECT * FROM Employee;
👏 이제 데이터도 복사 완료!
⚠️ 추가팁: 자동 증가 컬럼 (IDENTITY) 있을 때는?
SET IDENTITY_INSERT Employee_Copy ON;
INSERT INTO Employee_Copy (ID, Name, ...)
SELECT ID, Name, ...
FROM Employee;
SET IDENTITY_INSERT Employee_Copy OFF;
👉 IDENTITY 컬럼(ID 같은 자동 숫자 증가)은 이렇게 써줘야 오류 안 나요!
🙋♀️ 그럼 제약조건 수정은 어떻게 해요?
✅ 실수로 잘못 건 제약조건 삭제하기
ALTER TABLE Employee
DROP CONSTRAINT PK_Employee;
※ 제약조건 이름이 기억 안 날 땐? 👇
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME = 'Employee';
✅ 제약조건 다시 추가하기
ALTER TABLE Employee
ADD CONSTRAINT PK_Employee PRIMARY KEY (ID);
🎀 마무리 요약
항목설명
| 테이블 복사 | CREATE TO → 이름/제약조건 수정 후 실행 |
| 데이터 복사 | INSERT INTO 복사테이블 SELECT * FROM 원본테이블 |
| 제약조건 수정 | ALTER TABLE ... DROP/ADD CONSTRAINT ... |
| 자동 증가 컬럼 | SET IDENTITY_INSERT ON/OFF |
🍀 마무리
SQL이 어렵게 느껴질 수 있지만,
하나씩 차근차근 해보면 생각보다 괜찮아요!
저도 헤매면서 정리했지만, 이 글이 누군가에겐 시간 아끼는 지름길이 되면 좋겠어요 😌💻
SQL 공부는 정말 끝이 없네요,,,