반응형


부모 패키지에서 자식 패키지 변수값 읽어오기
 

한대성

MS SQL Server MVP

에이디컨설팅 | SQLLeader.com 운영자

 

 

 

작성자 : 야추 , 등록일 : 2007-04-13 오후 3:52:00
...
지금 난간에 빠져있는게 하나 있는데... 
가령
패키지안에서 패키지실행작업으로 패키지를 호출하는 게 있다고 할때, 
부모 패키지가 자식 패키지의 변수를 가져와서 그 값을 읽을 수 있는지? 
자식 패키지에서는 부모 패키지의 값을 패키지 구성 마법사로 읽어 들이는 것 같은데,
반대의 경우에는 어떻게 해야 하는지.. 몰라서요.. 
즉, 자식 패키지에서 변환이 이뤄진 데이타 건수를
부모 패키지에서 건수로 판단해, 에러, 정상으로 처리하려고 하거든요..
...
 
작년(2006년) 1월 MCPWorld 세미나 때 발표한 데모가 있습니다. (여기 글 참고)
 
질문 올라오면 설명해야지 했는데..드뎌 올라왔네요.^^ 감사..ㅎㅎ
 
잠깐 정리하고 설명드리겠습니다.
SSIS는 "내리 사랑" 입니다.
즉, 자식은 부모의 모든 것을 읽어서 이용할 수 있습니다. 하지만~! 부모는 자식의 것을 이용할 수 없습니다.
 
이것을 컨테이너 개념으로 생각하면 좀 더 간단합니다.
세미나나 교육 때 자주 언급하는 사항으로
      SSIS 패키지도 하나의 컨테이너 입니다. 따라서 SSIS는 총 5개의 컨테이너가 있습니다.
        1. 시퀀스 컨테이너   
        2. For 루프 컨테이너   
        3. Foreach 루프 컨테이너
        4. 작업 호스트 컨테이너
        5. 패키지 컨테이너
     입니다.
라는 것입니다. 1~3은 작업 개체로 있고, 4는 작업 자체를 말하는 것이고, 5가 개념적인 것입니다.
 
즉, 부모-자식 패키지 관계에서 자식 패키지도 하나의 컨테이너로 생각할 수 있다라는 것이지요.
이렇게 생각하면 좀 더 명확하겠죠. 패키지 내에 있는 컨테이너는 컨테이너 수준에서 정의된 변수 및 패키지 전체 수준의 변수를 다 사용할 수 있습니다. 하지만, 패키지 수준에서는 컨테이너 내부의 변수를 읽을 수 없습니다.
 
여기까지가 원칙적인 이야기이고, 이번 글에서는 반대의 경우를 구현하는 방법에 대해 살펴보겠습니다.
 
부모 패키지가 자식 패키지를 호출한 후, 자식 패키지의 변수값, 또는 처리된 결과 값을 읽어오는 경우입니다.
자식 패키지가 하나의 함수 또는 라이브러리 역할을 하는 것이지요.
 
이를 구현하기 위해서는 스크립트 작업을 이용해서 구현해야 합니다.
 
  a. 스크립트 작업에서 패키지 개체를 생성한 후,
  b. 자식 패키지로 설정하고,
  c. 패키지를 실행하고,
  d. 패키지 개체의 변수값을 읽어오는
방식입니다.
 
다음의 스크립트를 참고하시기 바랍니다.
 

Imports System

Imports System.Data

Imports Microsoft.SqlServer.Dts.Runtime

 

Public Class ScriptMain

 

     Public Sub Main()

 

        MsgBox(Dts.Variables("ParentVar").Value.ToString, _

        MsgBoxStyle.Information, "부모 패키지 초기값")

 

        Dim pkg As String

 pkg = "d:\Demo4_2_자식패키지.dtsx"

        Dim app As Application = New Application()

        Dim p As Package = app.LoadPackage(pkg, Nothing)

 

 '자식 패키지에 값을 전달할 : 부모 패키지의 ParentVar값을 자식 패키지의 ChildVar 전달

        'p.Variables("ChildVar").Value = Dts.Variables("ParentVar").Value

 

        p.Execute()

 

 '자식 패키지에 값을 읽어올 : 자식 패키지의 ChildVar 값을 부모 패키지의 ParentVar 저장

        Dts.Variables("ParentVar").Value = p.Variables("ChildVar").Value

 

 

         MsgBox(Dts.Variables("ParentVar").Value.ToString, _

         MsgBoxStyle.Information, "부모패키지변경값")

 

        Dts.TaskResult = Dts.Results.Success

    End Sub

 

End Class

 
데모 패키지를 참고하세요.
 
 

본 게시판에 실린 글은 누구나 복사하셔서 이용하셔도 되지만, 반드시 출처(SQLLeader.com) 링크를 밝혀주셔야 합니다.

 

반응형

+ Recent posts