Mam składnik skryptu, który akceptuje rekordy z tabeli bazy danych SQL Azure. Następnie skrypt wywołuje usługę internetową, która zwraca liczbę rekordów zakończonych niepowodzeniem i zakończonych powodzeniem.
Do wszystkich rekordów chciałbym dodać pole Status, które ma albo „sukces”, albo „porażkę”, a to pobiera dane wyjściowe ze skryptu.
Następnie loguję te dane wyjściowe do pliku tekstowego.
Problem: Nie byłem w stanie dodać statusu dla każdego rekordu wejściowego, ponieważ wywołanie usługi internetowej odbywa się tylko po wykonaniu.
Próbowałem tego, ale nadal nie działa:
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);
}
}
sql-server
ssis
flybyte
źródło
źródło
Odpowiedzi:
Wszystko w transformacji odbywa się w Input0_ProcessInputRow Rozwiązanie byłoby w istocie
Możesz wykonać kroki wyjściowe w PostExecute, CreateNewOutputRows nie jest uruchamiany w Transformacji, tylko w skryptach docelowych.
źródło
Nie jestem zbyt biegły w SSIS, ale myślę, że możesz wypróbować następujące pomysły:
Następnie miałbyś pustą kolumnę do swoich wyników i będziesz musiał wypełnić ją danymi dla każdego z wierszy wejściowych:
Pomoże to dodać kolumnę Status do tabeli wyników. Mam nadzieję, że tego właśnie chciałeś.
źródło