특정 테이블에 데이터를 insert 할 경우 기존 쿼리나 테이블에서 데이터를 조회하여 그 결과를 insert 할때 사용하는 쿼리이다.
select into의 경우 기존 테이블이 없는 경우 새로 테이블을 생성하며 insert 하고, insert into from의 경우 기존 테이블이 존재할때 해당 테이블에 조회결과를 insert 하는 역할을 한다.
[select into의 예 - 기존 테이블을 백업하는 경우나 쿼리 결과를 테이블로 저장하는 경우 유용]
SELECT * INTO MY_TABLE_BACKUP
FROM
(
SELECT * FROM
MY_TABLE
) TB1
MY_TABLE의 모든 내용(*) 을 조회하여 결과테이블 MY_TABLE_BACKUP 테이블을 생성하며 insert 해준다.
(이때 주의할점은 생성되는 테이블의 컬럼크기는 해당컬럼 값중 최대 길이로 맞춰진다.)
[INSERT INTO FROM 의 예]
INSERT INTO MY_TABLE_BACKUP
SELECT * FROM
(
SELECT * FROM
MY_TABLE
) TB1
빨간색 쿼리의 경우 MY_TABLE 에서 모든 항목을 조회하여 저장하게 되므로 결국
SELECT * INTO MY_TABLE_BACKUP
FROM
MY_TABLE
와 같은 문장이다.
괄호안을 쿼리로 작성한 이유는 쿼리 결과로도 데이터를 insert 할수 있음을 보여주기 위함이다.
만약 자동증가값이 존재하는 테이블의 경우 select into나 insert into from을 사용할때 에러가 발생하는데 이 경우 해당 쿼리 앞뒤로 SET IDENTITY_INSERT 문장을 on / off 해주면 된다.
[자동증가값이 있는 테이블의 예]
SET IDENTITY_INSERT MY_TABLE_BACKUP ON ;
INSERT INTO MY_TABLE_BACKUP
SELECT * FROM
(
SELECT * FROM
MY_TABLE
) TB1
SET IDENTITY_INSERT MY_TABLE_BACKUP OFF ;
'DB > MSSQL' 카테고리의 다른 글
MS-SQL 로그정리 및 크기 축소 (3) | 2020.11.04 |
---|---|
truncate table 과 delete table의 비교 (2) | 2020.11.03 |
over 절 count 또는 row_number()문과 함께 사용 (0) | 2020.11.02 |
offset fetch 페이징 구현등에 사용하는 쿼리 (0) | 2020.11.02 |
테이블정의서 작성시 테이블명, 컬럼명 가져오는 쿼리 (0) | 2020.10.28 |