Ich habe eine Skriptkomponente, die Datensätze aus der SQL Azure-Datenbanktabelle akzeptiert. Das Skript ruft dann einen Webdienst auf, der die Anzahl der fehlgeschlagenen und erfolgreichen Datensätze zurückgibt.
Für alle Datensätze möchte ich das Statusfeld hinzufügen, das entweder "Erfolg" oder "Fehler" hat und das von der Skriptkomponente ausgegeben wird.
Ich logge dann diese Ausgabe in eine Textdatei ein.
Problem: Ich konnte nicht für jeden Eingabedatensatz den Status hinzufügen, da der Webdienstaufruf nur nach der Ausführung erfolgt.
Ich habe es versucht, aber es funktioniert immer noch nicht:
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
quelle
quelle
Antworten:
Alles in einer Transformation wird in Input0_ProcessInputRow ausgeführt. Die Lösung wäre im Wesentlichen
Möglicherweise können Sie die Ausgabeschritte in PostExecute ausführen. CreateNewOutputRows wird nicht in Transformation ausgeführt, sondern nur in Zielskripten.
quelle
Ich beherrsche SSIS nicht sehr gut, aber ich denke, Sie könnten die folgenden Ideen ausprobieren:
Dann hätten Sie die leere Spalte für Ihre Ausgabe und müssen sie mit einigen Daten für jede der Eingabezeilen füllen:
Auf diese Weise können Sie Ihrer Ausgabetabelle eine Statusspalte hinzufügen. Hoffe das ist was du wolltest.
quelle