SQL Server/SSIS 강좌

스크립트 구성 요소 – [데이터 대상] 사용

SungWookKang 2015. 7. 16. 10:15
반응형

스크립트 구성 요소 – [데이터 대상] 사용

 

안녕하세요 강성욱 입니다. (www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 [스크립트 구성 요소] 사용에 대해서 알아 보도록 하겠습니다.

 

3부 – 데이터 대상으로 사용하기!

 

1부 – [스크립트 구성 요소] –[데이터 원본] 관련 링크

http://blog.naver.com/jevida/140160648324

 

2부 – [스크립트 구성 요소]-[데이터 변환] 관련 링크

http://blog.naver.com/jevida/140160719291

 

이번 [데이터 대상]은 입력 데이터 중에서 [OrderQty] 의 [합계]를 [메시지 박스]로 출력하여 봅니다.

 

 

[BIDS]를 실행하여 [Integration Services 프로젝트]를 생성 합니다.

 

[제어 흐름] 탭에서 [데이터 흐름 태스크]를 드래그 앤 드롭으로 추가 합니다.

[스크립트 구성 요소 3] 이름을 지정하여 태스크를 생성 합니다.

 

[데이터 흐름]탭에서 그림과 같이 [스크립트 구성 요소]를 끌어다 놓습니다. 이때 팝업으로 [스크립트 구성 요소 유형 선택]창이 나타 납니다.

이번 실습에서는 [대상]으로 선택 합니다.

 

[OLE DB 원본]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

그림과 같이 편집 창이 나타나면 [OLE DB 연결 관리자]에서 원본 DB의 연결 관리자를 선택하고 해당 테이블을 선택하여 [미리보기]를 이용하여 정상적으로 데이터가 읽어오는지 확인 합니다.

(본 실습에서는 Adventureworks의 Sales.SalesOrderDetail 테이블 사용)

 

[제어 흐름] 탭으로 이동하여 빈 공간에서 마우스 오른쪽을 클릭하여 [변수]를 선택 합니다.

 

[변수] 탭이 나타나면 변수명(SumQty)을 설정하고 범위를 [Package]로 지정한 다음 데이터 형식을 [Int32]로 지정 합니다.

 

[데이터 흐름] 탭으로 이동하여 [스크립트 구성 요소]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

[입력 열] 탭에서 [OrderQty]를 선택 합니다.

 

[입/출력] 탭에서 입력 이름을 [In_Qty]로 변경 합니다. (한글 사용의 경우 글자 깨짐으로 인하여 인식 불능의 문제가 있습니다.)

 

[스크립트] 탭에서는 [ReadWriteVariavles]에서 패키지 차원의 변수로 지정한 [User::SumQty]를 선택 합니다. 그리고 [스크립트] 버튼을 이용하요 스크립트 편집기를 실행 합니다.

 

스크립트 편집기에서 다음과 같이 코드를 입력 합니다.

 

/* Microsoft SQL Server Integration Services Script Component

* Write scripts using Microsoft Visual C# 2008.

* ScriptMain is the entry point class of the script.*/

 

using System;

using System.Data;

using Microsoft.SqlServer.Dts.Pipeline.Wrapper;

using Microsoft.SqlServer.Dts.Runtime.Wrapper;

 

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]

public class ScriptMain : UserComponent

{

int SumQty = 0;

 

public override void PreExecute()

{

base.PreExecute();

/*

Add your code here for preprocessing or remove if not needed

*/

}

 

public override void PostExecute()

{

base.PostExecute();

/*

Add your code here for postprocessing or remove if not needed

You can set read/write variables here, for example:

Variables.MyIntVar = 100

*/

Variables.SumQty = SumQty;

 

}

 

public override void InQty_ProcessInputRow(InQtyBuffer Row)

{

/*

Add your code here

*/

 

SumQty = SumQty + Row.OrderQty;

}

 

}

 

 

[제어 흐름]탭으로 이동하여 [스크립트 태스크] 작업을 드래그 앤 드롭으로 끌어다 놓습니다.

 

[스크립트 태스크]에서 마우스 오른쪽을 클릭하여 [편집]을 선택 합니다.

 

 

[스크립트] 탭에서 [ReadWriteVariables]에서 [User::SumQty] 변수를 선택 합니다. 그리고 [스크립트 편집]을 실행합니다.

 

다음과 같이 메시지 박스를 출력하는 코드를 프로그래밍 합니다.

MessageBox.Show(Dts.Variables["SumQty"].Value.ToString());

 

 

편집이 완료되었으면 패키지를 실행 합니다.

늘 그러듯!

녹색 : 정상 실행

빨간색 : 오류 발생

 

패키지를 실행하면 메시지 박스로 [OrderQty]의 총 합계가 출력되는 것을 확인 할 수 있습니다.

 

SSMS를 실행하여 실제 Qty의 합과 같은지 확인 합니다.

 

SSMS에서 실행한 합과 메시지 박스에 출력된 합이 같음을 알 수 있습니다.

 

반응형