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


10

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

1
プロセス入力行中にWebサービス呼び出しを実行できないのはなぜですか?すべてのデータは、そのメソッドがなくなると、すでにパイプラインを通過しています。ローカル変数にデータを蓄積していますが、この時点では、車を運転した写真を保持しているようなものです。そうです、それはそのように見えましたが、戻ってきません
billinkc

@flybyte:私の答えに役立つものはありますか?
マリアン

回答:


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番目のセクション)に移動します。
  • Output0-出力列に移動し、
  • 新しい列を追加します(名前とタイプを指定します。たとえば、Status-booleanとします)。

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

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.