MSSQL 테이블 복사하는 여러가지 방법에 대해 알아보도록 하겠습니다. DB작업시 전체백업을 항상 꼼꼼하게 한 뒤에 작업해야 겠지만, 한 두개의 테이블에 UPDATE, DELETE 작업을 할 때 예상치 못한 만일의 사태에 대비하기 위해서 또는 긴급하게 데이터를 원복하기 위해 개별 테이블 단위의 백업도 자주하게 됩니다. 이번 글에서는 SELECT INTO, INSERT SELECT 구문을 활용한 데이터복사와 테이블복사, JOIN을 활용한 데이터복사 및 조건절을 통한 필터링에 대해 알아보겠습니다. 아래의 테이블 카피 구문을 사용하면 간단한 쿼리로 신속하게 데이터를 백업하고 유사시 쉽게 원복할 수 있습니다.
예제로 사용할 테이블은 다음과 같습니다.
Fruit
Seq | Name | Flavor | Rank |
1 | 딸기 | 새콤하다 | 1 |
2 | 바나나 | 달콤하다 | 2 |
3 | 사과 | 향긋하다 | 3 |
FruitSimple
Seq | Name |
MonthlySales
Name | Month | Rank |
딸기 | 9월 | 3 |
바나나 | 9월 | 1 |
사과 | 9월 | 2 |
상황1. [Fruit] 테이블을 카피해 [Fruit_180101] 을 생성하고 데이터도 모두 카피하고 싶다.
SELECT * INTO Fruit_180101 FROM Fruit --테이블 자동생성하고, 데이터 모두 카피 SELECT * INTO Fruit_180101 FROM Fruit WHERE 1=2 --테이블 자동생성하고, 조건 1=2는 항상 false이므로 데이터는 카피되지 않음 SELECT * INTO Fruit_180101 FROM Fruit WHERE Seq < 3 --테이블 자동생성하고, Seq < 3인 데이터만 카피
결과1)
테이블 복사 및 데이터 모두카피 결과
결과2)
테이블만 카피한 결과
결과3)
테이블 카피하고 조건에 맞는 데이터만 카피
SELECT INTO 문은 테이블을 새로 생성하면서 데이터를 카피할 때 사용합니다. 물론 WHERE 조건절도 사용가능합니다.
주의) 키, 인덱스 등은 동일하게 생성되지 않음.
상황2. [Fruit] 테이블의 데이터를 [FruitSimple] 테이블에 데이터만 카피하고 싶다.
INSERT INTO Fruit_180101 SELECT * FROM Fruit --SELECT의 결과를 스키마가 같은 이미 존재하는 다른 테이블에 카피 INSERT INTO FruitSimple(Seq, Name) SELECT Seq, Name FROM Fruit --필드를 지정해서 카피가능 INSERT INTO FruitSimple(Seq, Name) SELECT Seq, Name FROM Fruit WHERE Seq <3 --조건절 사용 가능
결과1
SELECT의 결과를 스키마가 같은 이미 존재하는 다른 테이블에 카피
결과2
정 필드만 카피
결과3
조건절 사용하여 테이터만 카피한 결과
INSERT INTO SELECT문은 SELECT문의 결과 데이터를 다른테이블에 카피할 때 사용합니다. 일반적인 INSERT INTO문 처럼 특정필드만 지정 가능합니다.
응용1. [Fruit], [MonthlySales]두 테이블의 조인의 결과를 카피해 [FruitMonth_180101] 테이블을 생성하고 데이터도 모두 카피하고 싶다.
SELECT FR.Seq, FR.Name, MS.Month INTO FruitMonth_180101 FROM Fruit FR INNER JOIN MonthlySales MS ON FR.Name = MS.Name
결과1
응용2. Fruit, MonthlySales두 테이블의 조인의 결과를 FruitSimple 테이블에 일부 필드 데이터만 카피하고 싶다.
INSERT INTO FruitSimple(Seq, Name) SELECT FR.Seq, MS.Name FROM Fruit FR INNER JOIN MonthlySales MS ON FR.Name = MS.Name
결과1
두 테이블의 조인의 결과를 다른 테이블에 일부 필드 데이터만 카피하고 싶다.
프로젝트의 성공을 기원합니다.
'MS-SQL' 카테고리의 다른 글
MSSQL 특정노드의 하위노드 전체 가져오기(Top Down) (1) | 2018.12.06 |
---|---|
MSSQL 특정노드의 상위노드 전체 가져오기(Bottom Up) (0) | 2018.12.03 |
MSSQL UPDATE, UPDATE FROM (0) | 2018.10.24 |
mssql 변경 내용을 저장할 수 없습니다. 변경 내용을 적용하려면 다음 테이블을 삭제하고... 오류해결 (1) | 2018.10.23 |
MSSQL 0 채우기 가장 쉬운방법 (0) | 2018.10.20 |