2016-09-12 4 views
0

SSIS를 처음 접했을 때 나는 아마도 쉬운 질문에 완전히 빠져있었습니다. 일대 다 관계가있는 두 개의 테이블이 있습니다. 스크립트 구성 요소에서 HTML 데이터를 구문 분석하고 마스터 데이터 및 세부 레코드에 대해 두 개의 출력을 만듭니다. enter image description hereSSIS : 조건에 따라 마스터 정보 레코드를 저장하는 방법?

그런 다음 기존 데이터를 덮어 쓰기위한 조건을 확인하고 만족하면 표에 마스터 레코드를 씁니다. 불행히도 위의 그림 (내역보기)에서 데이터 흐름이 비슷합니다. 어떤 경우에도 세부 레코드가 추가됩니다. 조건이 충족되면 (그림의 녹색 화살표) 세부 정보 만 저장되지만 수행 방법은 상상할 수 없습니다.

+0

마스터 데이터를 작성해야 할 때 조건이나 결정 방법은 무엇입니까? 이 조건을 스크립트 작업 전에 이동하거나 스크립트 작업 내에서 설정할 수 있는지 여부에 따라 표현식 제약 우선 순위를 사용할 수 있습니다. 스크립트 내에서 그렇게하려면 스크립트에서 값을 설정하고 제약 조건에서 값을 테스트 할 수있는 패키지 변수를 추가하십시오. – Matt

+0

안녕하세요 @Matt! 여기서 조건은 문제를 설명하기위한 것입니다. 실제 구조는 더 복잡합니다. 하지만 팁 주셔서 감사합니다! –

답변

0

들! 결국 문제를 해결할 수있었습니다. 전체 프로세스를 두 개의 데이터 흐름으로 분할했습니다. 첫 번째 경우에는 html을 구문 분석하고 필요한 경우 테이블에 마스터 데이터를 저장하고 패키지 Object 변수에 구문 분석 된 세부 데이터를 저장합니다. 또한 첫 번째 데이터 흐름에는 MasterRowCount 변수에 값을 저장하는 Row Count 구성 요소가 있습니다. 두 번째 데이터 흐름에서 테이블에 세부 정보를 저장합니다. 첫 번째 및 두 번째 데이터 흐름은 표현식 제약 우선 순위 (@ MasterRowCount> 0)로 연결됩니다. 따라서 두 번째 데이터 흐름은 마스터 데이터가 추가 된 경우에만 실행됩니다.

1

XML 데이터를 상위 하위 테이블에로드해야 할 때 동일한 문제가 발생합니다. 이를 위해 패키지에 두 개의 데이터 흐름 태스크를 추가했습니다. 첫 번째 DFT에서는 XML을 구문 분석하고 데이터를 마스터 테이블에만로드했습니다. 두 번째 DFT에서 자식 XML 노드 데이터를 파싱하고이 출력을 병합 연산자 (첫 번째 입력)에 병합합니다. 이제 우리는 조인 연산자를 병합하기 위해 두 번째 입력을 전달해야합니다.이 경우 마스터 테이블의 데이터를 추출해야합니다.

Master table insertion -

Child table insertion -

+0

감사합니다, @ BhatiaAshish! –

+0

나는 생각을 가지고있다. 내가 좋아하지 않는 것은 XML이 두 번 파싱된다는 것입니다. 필자의 경우 원본은 원격 웹 페이지입니다. 그러나 나는 그것을 극복하는 방법을 생각할 것입니다. 데이터 흐름 사이에 html 노드를 Object 변수로 전송할 수 있습니다. –