반응형

로컬 임시 테이블의 활용 (3)

 

 

백도훈

에이디컨설팅 선임 컨설턴트

 

 

앞에서 구현한 예제를 운용하고 있었다고 가정해보겠습니다. 운용 도중 필요에 의해서 가져와야 정보가 늘었다면 로컬 임시 테이블의 컬럼을 추가해야 합니다. 이럴 기존 패키지를 어떻게 수정해야 하는지 다른 예제를 통해서 알아보도록 하겠습니다.

 

앞의 예제에서는 AdventureWorks DB 있는 [Person].[Contact] 테이블의 ContactID, FirstName 열을 로컬 임시 테이블로 가져왔었습니다. 여기에 LastName 컬럼도 추가로 가져오는 시나리오로 예제를 작성해보겠습니다.

 

1.      테이블 정의를 수정합니다.
앞의 예제에서 로컬 임시 테이블의 데이터 확인용으로 사용한 TB_T1 테이블의 정의를 수정합니다.
그리고, 데이터도 삭제하겠습니다.

 

USE TargetDB

GO

 

ALTER TABLE TB_T1

             ADD COL3 NVARCHAR(50)

 

TRUNCATE TABLE TB_T1



2.      로컬 임시 테이블 생성 쿼리를 수정합니다.
SQL
실행 작업 태스크에서 로컬 임시 테이블을 생성했었습니다. 쿼리도 수정하겠습니다.
SQL
실행 작업 태스크의 편집기에서 SQLStatement 속성을 아래의 쿼리로 변경합니다.

수정

CREATE TABLE #T1 (COL1 INT, COL2 NVARCHAR(50))

수정

CREATE TABLE #T1 (COL1 INT, COL2 NVARCHAR(50), COL3 NVARCHAR(50))




3.      SouceDB에서 가져오는 열을 추가합니다.
데이터 흐름 작업 디자인 모드에서 OLE DB 원본의 편집기를 엽니다. 페이지로 이동해서 LastName 외부 열의 체크를 추가합니다.




4.      로컬 임시 테이블에 데이터를 입력합니다.
사실 부분 때문에 번째 예제를 만들고 있다고 해도 과언이 아닙니다. 앞의 예제를 기억하고 계신다면, 없는 테이블을 연결했던 부분이기 때문에 수정도 목록에서 선택하는 방법이 아닌 앞에서 사용한 방법을 그대로 사용해야 합니다.

OLE DB
대상 편집기를 열고 연결 관리자 페이지에서 테이블 또는 이름 속성을 [dbo].[TB_T1]으로 선택합니다.




여기서 생기는 의문 한가지가 있습니다. TB_T1 테이블을 계속 활용은 하고 있는데 사실 테이블은 로컬 임시 테이블에 어떤 값이 들어갔나 확인해보기 위해 만든 테이블입니다. 실제 업무에서 이런 패키지를 구현하다 보면 로컬 임시 테이블과 동일한 스키마의 테이블이 DB 항상 있을 수는 없다는 것입니다. 그럴 때는 어떻게 해야 할까요?

테이블 또는 이름 속성 오른쪽에 보면 새로 만들기 버튼이 있습니다. 버튼을 클릭하면 테이블 만들기 라는 편집 창이 열립니다. 거기에 로컬 임시 테이블과 같은 구조의 테이블 생성 쿼리를 입력해주면 실행할 테이블이 생성됩니다. 패키지가 완성되고 나면 이렇게 생성한 테이블은 DB에서 drop 시켜주면 됩니다.



일단 지금 예제에서는 [dbo].[TB_T1] 선택하고 매핑 페이지로 이동하겠습니다. 입력 열에 추가된 LastName 바르게 연결해줍니다.



그리고 TB_T1으로 지정된 OLE DB OpenRowset 로컬 임시 테이블로 변경해주면 패키지의 변경이 완료됩니다.




5.      디버그 해보겠습니다.



패키지가 정상적으로 실행되었습니다.

연결 관리자의 RetainSameConnection 속성은 패키지 내의 태스크에서 맺은 DB 연결을 패키지 종료까지 끊지 않게 설정하는 속성입니다. 대량 반복하는 루프 컨테이너 내부에서 DB 실행 작업을 연결을 맺고 끊는 오버헤드를 줄일 수도 있고 이번에 소개한 것처럼 로컬 임시 테이블을 효과적으로 사용할 있는 장점도 있지만 하나의 연결로는 병렬 처리가 힘들다는 등의 단점들도 있습니다. 상황에 맞게 활용해야 하는 속성일 입니다.

 

반응형

+ Recent posts