본문 바로가기
DATABASE/MsSQL

[MsSQL] Openquery insert - 다른 데이터베이스의 테이블에 데이터 저장하기

by DANEW 2024. 4. 16.

Openquery

Linked Server (연결된 서버)를 통해 연결이 되어있는 데이터베이스 들에 대해 Openquery문법을 통해 서로 연결하여 DML을 실행 할 수 있으며, 저번 포스팅에 select문에 관련된 여러가지 방법에 대해서 소개 하였다.

 

[MsSQL] Openquery select - 다른 데이터베이스 데이터 읽고 저장하기

 

select문을 이용하여 내가 현재 위치하고있는 데이터베이스에 데이터를 insert할 수 있지만,

원격지 이기종 데이터베이스에 데이터를 insert하는 방법에 대해서 간략하게 소개해 보도록 하겠다.

 

insert into ~ values

select *
  from openquery([Linked Server], '[select Query]')

 

연결된 서버를 통해 연결되어있는 타 데이터베이스 서버에 대해서 openquery를통해 XTMP_BAN이라는 테이블의 데이터를 조회해보자.

미리 넣어둔 2 row의 데이터가 조회되는데, 한번 추가로 데이터를 insert 해보도록 하겠다.

 

insert into ~ values문을 통해 데이터 값을 insert 할 수 있다.

insert into openquery ([Linked Server], '[select Query]')
values (col1, col2 ...)

 

[select query]에 들어가는 문법은 해당 연결된 서버의 데이터베이스에 맞는 문법을 사용하며, 특정 컬럼에만 데이터를 넣고 싶다면, 해당 컬럼을 명시하고, values에도 컬럼의 수와 위치를 맞추어 기입하도록 한다.

하나의 컬럼만 넣을경우 이렇게 [select query] 에 컬럼명을 기입, 아래와 같이 나머지 컬럼에는 null이 들어감을 확인 할 수 있다.

반응형

insert into ~ select

insert into openquery ([Linked Server], '[select Query]')
select * 
  from [Table Name]

 

insert하고자 하는 원격지의 테이블을 openquery를 통해 조회하여, 그 테이블의 현재 데이터베이스의 테이블을 select하여 insert한다.

우리가 기본적으로 사용하는 insert into ~ select문에서 insert into 부분만 openquery로 바뀐 것 이다.

 

이렇게 보면 정말 간단하다.

 

원격지에 데이터를 insert하는 과정의 openquery의 동작 방식은 한건한건 commit 하여, 대용량 데이터 insert에 적합하지않다.

대용량의 원격지 데이터 이동 작업을 위해서는 csv파일을 이용하거나, mssql의 경우 SSIS를 통한 데이터 이동 등을 고려하여 작업하는것이 바람직하다.

반응형