web-dev-qa-db-ja.com

SSISスクリプトコンポーネント-Output0Bufferを変更する方法

SQL Azureデータベーステーブルからのレコードを受け入れるスクリプトコンポーネントがあります。次に、スクリプトはWebサービスを呼び出し、Webサービスは失敗したレコードと成功したレコードの数を返します。

すべてのレコードについて、「成功」または「失敗」のいずれかを含むステータスフィールドを追加します。これにより、スクリプトコンポーネントから出力が取得されます。

次に、それらの出力をテキストファイルに記録します。

問題:Webサービスの呼び出しは実行後のみに発生するため、各入力レコードのステータスを追加できません。

私はこれを試しましたが、それでもうまくいきません:

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);
     }
 }
10
flybyte

変換のすべてが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は変換では実行されず、宛先スクリプトでのみ実行されます。

6
JohnDavid

私はSSISにあまり熟達していませんが、以下のアイデアを試すことができると思います。

  • スクリプトコンポーネントに移動して編集します。
  • セクション入力と出力(3番目のセクション)に移動します。
  • output0-出力列に移動し、
  • 新しい列を追加します(名前とタイプを指定します。たとえば、Status-booleanとします)。

次に、出力に空の列を設定し、各入力行のデータをいくつか入力する必要があります。

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

これは、出力テーブルにステータス列を追加するのに役立ちます。これがあなたが望んだものであることを願っています。

3
Marian