동일한 구조의 테이블로 결과 보내기
한대성
MS SQL Server MVP
에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자
Question
제가 궁금한 것은요... 동일한 구조를 가진 테이블이 여러 sql서버에 존재할 경우, foreach loop내에서 연결을 동적으로 바꾸면서 데이터흐름작업을 할 수 있을까요?
테이블에 서버 목록을 넣어 놓고 이 것을 읽어 들이면서 루핑을 돌리면 될 듯도 한데..참 어렵습니다..
질문과 비슷한 형태인데, 가져오기 대신 내보내기 형태로 구현하면서 설명 드리겠습니다.
다음과 같이 하나의 원본 테이블을 서로 다른 서버에 있는 동일한 형태의 테이블들로 이관하는 예입니다.
다음과 같이 원본 테이블 및 대상 테이블들을 준비합니다.
--Source Table USE TEMPDB GO
( SEQ INT IDENTITY, COL VARCHAR(10) DEFAULT('SourceData') ) GO
GO 10
USE TEMPDB GO
( SEQ INT, COL VARCHAR(10) ) GO
USE TEMPDB GO
( SEQ INT, COL VARCHAR(10) ) GO
USE TEMPDB GO
( SEQ INT, COL VARCHAR(10) ) GO
|
SSIS 빈 패키지를 하나 추가한 후, 다음과 같이 DB 연결에 필요한 속성을 받기 위한 변수들을 설정합니다.
기본 설정을 하기 위해 ConnectionString을 제외한 나머지 변수들에는 초기값을 넣어줍니다.
이제, ConnectionString을 선택한 상태에서 속성 창을 살펴봅시다. 속성 창의 여러 항목 중 Expression을 선택합니다. 이 속성의 오른쪽 부분 끝에 … 버튼이 있습니다. 이를 클릭해서 ConnectionString 변수에 대한 식(Expression)을 설정하는 창을 엽니다.
식 작성기에서 다음과 같이 연결 문자열을 만드는 식을 입력합니다.
"Provider=SQLOLEDB.1;Data Source=" + @[사용자::ServerName] + ";User ID=" + @[사용자::LoginID] + ";Password=" + @[사용자::Password] + ";Initial Catalog=" + @[사용자::DBName] + ";Persist Security Info=True;" |
확인을 눌러 식 작성기 창을 닫고, 속성 부분에서 EvaluateAsExpression의 속성값을 False에서 True로 변경합니다.
이제, 연결 관리자에서 OLE DB 연결을 하나 추가한 후, 이름을 TargetServer로 변경합니다. 이 때 연결 정보는 위에서 변수에서 설정한 것과 같이 대상 테이블 중 하나에 맞도록 설정합니다. 그런 다음 위에서와 같이 TargetServer 연결을 선택한 상태에서 속성 창의 Expression을 선택해서 식을 설정합니다.
앞에서 변수에 대한 식을 설정했을 때와는 달리 여러 속성을 선택할 수 있는 속성 식 편집기가 나타납니다. 여기서 ConnectionString을 선택한 후 @[사용자::ConnectionString] 변수로 식을 설정합니다.
자, 이제 연결 관리자에 Source 테이블에 대한 OLE DB 연결을 추가하고, 이 이름을 SourceServer라고 변경합니다.
제어 흐름 영역에 Foreach 루프 컨테이너를 추가합니다. 서버 정보를 하나씩 가져오는 부분을 구현할 것인 것 본 예제에서는 간단히 Foreach Item 열거자를 이용해서 직접 서버 정보들을 입력하는 형태로 구현하겠습니다.
Foreach 루프 컨테이너의 속성 창을 연 다음, Enumerator를 Foreach Item 열거자로 변경하고 아래와 같이 대상 서버들에 대한 정보를 입력합니다.
변수 매핑 탭에서 다음과 같이 각 열 정보에 대해 매핑되는 변수를 설정합니다.
확인을 눌러 편집기 창을 닫고, 컨테이너 안에 데이터 흐름 작업을 하나 추가합니다.
데이터 흐름 작업에서 OLE DB 원본과 OLE DB 대상을 추가한 후, 각각 SourceServer, TargetServer로 연결과 테이블을 설정합니다.
다 되었습니다. 패키지를 실행하면서 반복해서 각 테이블들에 데이터가 들어가는지 확인해 봅시다.
![](http://www.sqlleader.com/Pds/Board/SS2005SSIS/Editor/0000%5B0%5D.jpg)
'연구개발 > DTS & SSIS' 카테고리의 다른 글
스크립트 변환에서 오류 처리하기 (0) | 2011.08.27 |
---|---|
[DTS] 데이터 로딩 과정에서 필터링 하기 (0) | 2011.08.27 |
FTP 작업에서 파일 없는 경우 처리 방법 (0) | 2011.08.27 |
스크립트 변환을 이용한 문자열 분리 (0) | 2011.08.27 |
데이터 필터링 구현 (0) | 2011.08.27 |