SSIS 脚本组件 - 如何修改 Output0Buffer

fly*_*yte 10 sql-server ssis

我有一个脚本组件,它接受来自 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);
     }
 }
Run Code Online (Sandbox Code Playgroud)

小智 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);
}
Run Code Online (Sandbox Code Playgroud)

您可以在 PostExecute 中执行输出步骤,CreateNewOutputRows 不在 Transformation 中运行,只能在 Destination 脚本中运行。


Mar*_*ian 3

我对SSIS不是很精通,但我认为你可以尝试以下想法:

  • 转到脚本组件并编辑它,
  • 转到输入和输出部分(第三部分),
  • 转到 Output0 - 输出列,
  • 添加一个新列(为其指定名称和类型,假设状态 - 布尔值)。

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

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

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