SSIS脚本组件-如何修改Output0Buffer


10

我有一个脚本组件,该组件接受来自SQL Azure数据库表的记录。然后,脚本调用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
为什么在processinputrows期间不能执行Web服务调用?一旦脱离该方法,所有数据都将流向管道。您正在本地变量中累积数据,但此时,这就像拿着一张刚刚驶离汽车的图片,是的,虽然看起来像那样,但它没有回来
billinkc 2011年

@flybyte:对我的回答有用吗?
玛丽安

Answers:


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-输出列,
  • 添加一个新列(为其命名和类型,例如Status-boolean)。

然后,您的输出中将有一个空列,并且需要为每个输入行填充一些数据:

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

这将帮助您将“状态”列添加到输出表。希望这就是您想要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.