SSI를 사용하여 다른 행으로 평평한 파일을 내보내는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/213411

  •  03-07-2019
  •  | 
  •  

문제

표준 관계를 가진 트리 테이블, 고객, 송장 및 송장이 있습니다.

이들은 각 행의 첫 두 문자로 행 유형을 식별하는 하나의 고정 필드 길이 파일로 내보내야합니다. 행 유형마다 사양이 다릅니다.

스크립트 블록에서 중첩 루프로 할 수는 있지만 이것은 최초의 SSIS 패키지이며 해당 솔루션은 잘못된 느낌입니다.

편집하다:

출력에는 다음이 있어야합니다.

Customer  
Invoice  
Rows  
Customer  
Invoice  
Rows  
and so on
도움이 되었습니까?

해결책

스크립트 대상 구성 요소를 사용 하여이 작업을 수행하는 것에 대한 직감이 정확합니다. 불행히도,이 시나리오는 SSIS와 잘 어울리지 않습니다. 나는 이것을 초보자 패키지라고 생각하지 않습니다. SSI를 사용해야하는 경우 모든 데이터를 결합하는 내부로 시작하여 세 개의 테이블 모두에서 필요한 데이터를 포함하는 각 송장에 대해 하나의 행이 있습니다.

CustomerCols, Invoicecols, Rowcols

그런 다음 스크립트 대상 구성 요소에서 고객과 송장 값을 추적해야합니다. 변경하므로 출력에 추가 행을 작성해야합니다.

보다 스크립트 구성 요소로 대상 생성 스크립트 대상에 대한 자세한 내용은

내 경험에 따르면 대본 목적지가 좋은 성능을 가질 수 있습니다.

다른 팁

스크립트 대상을 쓰지 않고 스크립트 변환 + 플랫 파일 대상 만 사용합니다. 이런 식으로, 당신은 논리적 출력 (데이터 문자열)에 집중하면서 SSI가 파일에 실제 쓰기를 할 수 있도록 허용합니다 (조금 더 효율적 일 수 있으며 파일 쓰기가 아니라 비즈니스에 집중할 수 있습니다).

먼저, 비정규 화 된 데이터를 가져와야합니다. DBMS에서 조인 및 정렬을 수행 할 수 있지만 DBM에 너무 많은 압력 을가하지 않으려면 정렬 된 데이터를 가져 와서 두 SSIS Merge Join 변환을 사용하여 병합하십시오.

그런 다음 스크립트를 수행하십시오. 현재 고객 및 송장의 값을 계속 실행하고 변경할 때 출력하고 모든 입력에서 송장을 출력하십시오. 이 같은:

if (this.CustomerID != InputBuffer.CustomerID) {
  this.CustomerID = InputBuffer.CustomerID;
  OutputBuffer.AddRow();
  OutputBuffer.OutputColumn = "Customer: " + InputBuffer.CustomerID + " " + InputBuffer.CustomerName;
}
// repeat the same code for Invoice

OutputBuffer.AddRow();
OutputBuffer.OutputColumn = "InvoiceRow: " + InputBuffer.InvoiceRowPrice;

마지막으로, 단일 열 (스크립트에서 생성 된 outputColumn)이있는 플랫 파일 대상을 추가하여 파일에 작성하십시오.

출력이 모두 출력 파일 (행 유형 지정자 포함)에 적합하도록 세 테이블을 처리하십시오. 데이터 흐름에서 세 가지 별도의 흐름 경로 로이 작업을 수행 한 다음 행을 Union에서 모든 데이터 흐름 요소로 가져와야합니다. 거기에서 출력 파일을 만들기 위해 필요에 따라 처리하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top