SSIS Foreach 컨테이너 사용하기

현재 주소 복사
트랙백 주소 복사
방실이님의 글 (4/10/2012 2:39:04 PM) Viewing : 4000

제가 DTS 를 처음 접해본게 2005년쯤 된거 같습니다.

SQL 2000에는 DTS가 있었죠.. 스크립트 태스크에는 VB 스크립트만 허용되었던.. 그 옛날..

SQL 2005가 나오면서 SSIS 라고 이름이 바뀌었고 .NET Framwork 안에 쏘옥 숨었습니다.

그러나 VB.NET만 지원 하는 반쪽짜리 였죠..

SQL 2008에 이르러서야 C#을 지원하게 되었습니다만...

저는 2005년 다녔던 회사에서 이직후에 DTS는 가끔 썼지만 SSIS는 새로 공부해야 하는 압밥감으로 ㅎㅎ 보지 않았었죠.

최근에 프로젝트를 진행하면서 각종 데이터 이전 작업때문에 다시 보게 되었습니다.

DTS에서도 있었는지 가물가물합니다만..- 아마도 없었던듯...

컨테이너 라는 놈이 있는데 이중에 For 컨테이너와 Foreach 컨테이너가 있습니다.

컨테이너 라는 놈은 처음 써 보았기에..기록을 남깁니다..ㅎㅎ

MSDN 에 설명이 나오긴 했는데...이해하기가 어렵더군요..ㅡ,.ㅡ;

그래도 SSIS 를 사용해 보고자 하는 분들은 필독 해보십시오.

일단 목표는 아래와 같습니다.

부서명을 변경하는데 그 해당되는 목록을 가져와서 그 목록 안에서 루프를 돌면서 그 값으로 어떠한 쿼리를 해서 그 결과로 업데이트를 하는 것입니다.

어렵지 않아요..^^;

먼저 목록을 가져오기 위해 SQL 실행 태스크를 제어흐름 디자이너에 옮긴 후 더블클릭을 합니다.

편집을 해 봅시다.

아 그전에 연결 관리자에서 연결을 만들어야 합니다.

연결은 기본적으로 ADO.NET 프로바이더를 이용하시면 좋습니다. 상황에 따라서는 OLE를 이용해야 하는 경우도 있긴 하지만..기본으로는 ADO.NET 을 이용하시길 권해요.

어쨋든 연결을 만든 후에 조금 전에 연 SQL 실행 태스크에서 SQLStatment 에 쿼리를 입력합니다.

대상이 되는 목록이 되는 쿼리가 되겠습니다. 이는 목록(DataSet)으로 받아야 합니다.

우측 중간쯤에 결과 집합에 전체 결과 집합을 선택하십시오.

혹시 이 쿼리에 매개변수가 필요하다면 왼쪽 매개변수매핑을 클릭하고 세팅하면 됩니다만..저는 필요가 없군요..^^;

왼쪽에서 세번째 탭인 결과 집합을 클릭하면 아래와 같은 화면이 나옵니다.

결과 이름은 0 입니다.- 첫번째 탭인 일반에서 결과 집합을 전체 결과 집합으로 선택한 경우에는 반드시 이 값은 0이어야 합니다.

변수 이름은 목록을 받을 것으로 만드세요 형식은 object 입니다.

디버깅 해보면..이 변수값에 예상 했던 대로 DataSet 형식의 값이 들어 있음을 알 수 있습니다.^^;

이제 Foreach 컨테이너를 제어흐름디자이너에 옮깁니다.

더블 클릭하면 아래 편집 윈도우가 활성화 됩니다.

컬랙션 탭을 클릭합니다.

컬랙션 종류는 여러개가 있습니다만.... 자세한 건 위 링크의 MSDN 도움말을 보시고..(봐도 이해가 안되던...1 人)

Enumerator 에 Foreach ADO 열거자를 선택합니다. 그리고 ADO 개체 원본 변수에

이전 SQL 실행 태스크에서 지정하였던 DataSet 형식의 바로 그 변수를 선택합니다.

Foreach 내부에 전달 해 줄 변수를 선언합니다.

이 변수는 SQL 실행 태스크에서 정한 쿼리를 실행하게 되면 나오는 그 결과값(DataSet)에서 몇번째 컬럼의 값을 변수로 쓸 것인가를 할당 하는 것입니다.

즉 위 예를 보시면 첫번째 컬럼은 PROJ_NO 라는 변수에 대입되고 네번째 컬럼은 TEAM_CD 라는 변수에 대입됩니다.

이 2개의 변수는 Foreach 컨테이너 내부에서 사용될 것입니다.

Foreach 컨테이너 내부에 있는 첫번째 SQL 실행 태스크입니다.

이 태스크에서는 주어진 변수로 어떠한 값을 조회 하여 그 결과를 다른 변수에 저장 하는 일을 합니다.

기본적으로는 앞서 만든 SQL 실행 태스크와 같습니다만 결과 집합을 보시면 단일 행 으로 되어 있습니다.

이 쿼리에는 매개변수가 필요 합니다.  매개변수는 매개 변수 매핑 탭에서 정의 합니다.

매개 변수 매핑 탭에서 Foreach 컨테이너에서 넘겨준 TEAM_CD 라는 변수를 입력 매개변수로 사용합니다.

이 값은 쿼리에서 @TEAM_CD 라는 이름으로 사용됩니다.

다음은 결과 집합입니다.

이 쿼리는 2개의 컬럼을 SELECT 하는 쿼리입니다.

결과 이름에 그 컬럼의 인덱스를 넣어 줍니다. ( 컬럼의 이름이 아니라 인덱스입니다.)

이 결과는 각각 우측에 있는 DivCode와 DivName 이라는 변수에 매핑 됩니다.

이제 마지막으로 SQL 실행 태스크를 하나 더 만듭니다.

이 태스크는 업데이트를 담당합니다.

이 태스크는 매개 변수 매핑에 앞 태스크에서 생성한 2개의 매개변와 Foreach 컨테이너가 전달해준 변수를 사용합니다.

 

이상으로 Foreach 컨테이너를 사용하는 방법을 알아 보았습니다.

 참 쉽죠잉~~~


마지막 업데이트 : (4/10/2012 2:39:04 PM)

TAG : SSIS 



Trackback 보기 (0)
댓글 보기 (0)
댓글 쓰기