회사 일 하다가 대용량 데이터를 수정할 일이 있어서 혹시나 하는 마음에.. 😵‍💫
테이블복사하면서 데이터, 제약조건을 복사하려고 하는데 
그냥 SELECT INTO 쓰면 제약조건은 복사 안 되고...
그래서 공부 겸 정리해봤어요! 🤓💪

 

✅ 목표

기존 테이블을 완전히 복사할 거예요.

  • 테이블 구조 ✅
  • 제약조건 (Primary Key, Foreign Key, Index 등) ✅
  • 데이터 ✅

👉 복사하고 싶은 테이블: Employee
👉 복사본 테이블 이름: Employee_Copy


📌 Step 1. 테이블 스크립트 추출 (구조 복사용)

  1. SSMS에서 복사할 테이블 Employee 찾기
  2. 테이블에 우클릭 → 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 공부는 정말 끝이 없네요,,,