2012-06-12 4 views
2

다른 서버의 2 개 데이터베이스 (링크 아님)에서 데이터를 가져와야하는 SSIS 응용 프로그램이 있습니다. 두 데이터베이스 사이에 일치 이름과 DOB 레코드를 가져와 결과를 사용하여 테이블을 삽입/업데이트해야합니다. 나의 초기 접근 방식은 OLE DB 소스를 사용하고 조인을 병합 한 다음 레코드 세트에 결과를 저장하는 것입니다. 그런 다음 controlflow에서 레코드 세트의 결과를 사용하여 테이블을 삽입/업데이트하십시오. 그러나 컨트롤 흐름에서 레코드 집합을 볼 수 없습니다. 대체 솔루션은 임시 테이블을 만드는 것입니다. 그러나 임시 테이블은 각 서버의 tempdb 데이터베이스에 있기 때문에 표시되지 않습니다. 이 문제에 대한 더 나은 접근 방법은 무엇입니까?SSIS : 레코드 세트 또는 임시 테이블

+0

서버 A와 서버 B의 데이터 테이블의 한 세트는 드라이버이고 다른 하나는 참조 또는 두 세트를 병합하여 최종 대상에로드해야합니까? – billinkc

답변

1

무엇을 의미합니까? put the results to recordset?

조인을 사용하여 데이터 흐름에 두 개의 소스를 조인하면 조인의 해당 "레코드 세트"는 현재 데이터 흐름 중에 만 사용할 수 있습니다. 데이터 흐름이 finisehd 된 후에는 제어 흐름에서 사용할 수 없습니다.

대상 DB에 결과 집합을 삽입 할 수없는 이유는 무엇입니까? 동일한 데이터 흐름에서 다른 변환 작업을 수행하고 결과를 대상 데이터베이스에 삽입 할 수 있습니다.

또는 데이터를 삽입하기 전에 컨트롤 흐름에서만 수행 할 수있는 작업을 수행해야한다면 oleDBDestination을 사용하여 대상의 임시 테이블에 레코드 세트를 삽입하고 다른 데이터 흐름에 액세스 할 수 있습니다 (비록 좋은 접근 방법이 아님)

+0

답변 해 주셔서 감사합니다. OLE DB 대상을 사용한 다음 다른 패키지를 만들어 OLD DB 명령을 사용하여 나머지 테이블을 업데이트합니다. – dmarkez

1

이 경우 작업 테이블에 대해 데이터베이스를 유지하거나 해당 작업 테이블에 대한 스키마를 작성합니다.

그런 다음 중간 결과를 보유 할 테이블을 자르는 SQL 제어 흐름 태스크를 추가하십시오. 그런 다음 중간 결과 집합을 테이블에로드하고 작업을 수행하고 선택적으로 테이블을 다시 자릅니다.

소규모 데이터 집합의 경우 레코드 세트 대상이 적합합니다. 그러나 메모리에 맞지 않는 더 큰 데이터 세트에 사용할 계획이라면 매우 느릴 것입니다.

작업 영역으로 사용할 수있는 데이터베이스/스키마가 없으면 RAW 파일을 사용하여 중간 결과를 저장할 수 있습니다. 그것들도 매우 빠릅니다.

관련 문제