SSIS 스크립트 구성 요소-Output0Buffer를 수정하는 방법


10

SQL Azure 데이터베이스 테이블에서 레코드를 허용하는 스크립트 구성 요소가 있습니다. 그런 다음 스크립트는 웹 서비스를 호출하여 실패 및 성공 레코드 수를 리턴합니다.

모든 레코드에 대해 "성공"또는 "실패"가있는 상태 필드를 추가하고 싶습니다. 그러면 스크립트 구성 요소에서 출력됩니다.

그런 다음 해당 출력을 텍스트 파일에 기록합니다.

문제 : 웹 서비스 호출은 실행 후에 만 ​​발생하므로 각 입력 레코드에 상태를 추가 할 수 없습니다.

나는 이것을 시도했지만 여전히 작동하지 않습니다.

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
         listOfData.Add(new ClockData 
         {
             TimeClockID=Row.TimeClockID,
             PersonID=Row.EmployeeCode,
             LocationCode=Row.ClockInServiceContextID,
             ClockInDateTime=Row.ClockInDateTime,
             ClockOutDateTime=Row.ClockOutDateTime

         });
 }

 public override void CreateNewOutputRows()
 {
     MessageBox.Show("Test CreateNewOutputRows");
     MessageBox.Show(listOfData.Count.ToString());
     foreach (var item in listOfData)
     {
         Output0Buffer.AddRow();
         Output0Buffer.EmployeeCode = item.PersonID;
         MessageBox.Show(item.PersonID);
     }
 }

1
프로세스 입력 중에 웹 서비스 호출을 실행할 수없는 이유는 무엇입니까? 모든 데이터는 이미 그 방법을 벗어나면 파이프 라인으로 내려갔습니다. 당신은 당신의 지역 변수에 데이터를 축적하고 있지만이 시점에서 그냥 운전 자동차의 사진을 들고처럼 거리를 - 예, 그게 어떻게 생겼는지입니다하지만 돌아 오지 않을거야
billinkc

@ flybyte : 내 대답에 유용한 것이 있습니까?
Marian

답변:


6

변환의 모든 것은 Input0_ProcessInputRow 내에서 수행됩니다. 솔루션은 본질적으로

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
         listOfData.Add(new ClockData 
         {
             TimeClockID=Row.TimeClockID,
             PersonID=Row.EmployeeCode,
             LocationCode=Row.ClockInServiceContextID,
             ClockInDateTime=Row.ClockInDateTime,
             ClockOutDateTime=Row.ClockOutDateTime
         });
         Output0Buffer.AddRow();
         Output0Buffer.EmployeeCode = item.PersonID;
         MessageBox.Show(item.PersonID);
}

PostExecute에서 출력 단계를 수행 할 수 있습니다. CreateNewOutputRows는 변환에서 실행되지 않고 대상 스크립트에서만 실행됩니다.


3

나는 SSIS에 능숙하지 않지만 다음 아이디어를 시도해 볼 수 있다고 생각합니다.

  • 스크립트 구성 요소로 이동하여 편집하십시오.
  • 입력 및 출력 섹션으로 이동 (3 번째 섹션)
  • 출력 0-출력 열로 이동하여
  • 새 열을 추가하십시오 (이름과 유형을 부여하고 상태-부울이라고 가정하십시오).

그런 다음 출력에 빈 열이 있고 각 입력 행에 대한 데이터로 채워야합니다.

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    Row.Status = IIf(String.IsNullOrEmpty(rowValues.GetValue(1).ToString()), 0, 1)

출력 테이블에 상태 열을 추가하는 데 도움이됩니다. 이것이 당신이 원하는 것이기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.