1

我一直假设 Input0_ProcessInputRow(Input0Buffer Row) 方法对通过脚本组件的每一行运行一次:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    //Code in here runs once for each row coming in to the Script Component
}

我最近发现了另一种名为ProcessInput(int inputID, PipelineBuffer buffer)的方法,我想知道我是否因为从不使用它而做错了什么。

在哪些情况下我会使用 Input0_ProcessInputRow() 与 ProcessInput()?

谢谢。

4

1 回答 1

2

经过一番研究,事实证明使用 _ProcessInputRow() 方法是在 SSIS 脚本组件中处理输入的正确方法。

我在研究中发现 _ProcessInput() 可用于手动迭代 Buffer 并将结果发送到 _ProcessInputRow() (但是除非你有理由这样做,否则没有必要这样做):

public override void  Input0_ProcessInput(Input0Buffer Buffer)
{
    while (Buffer.NextRow())
    {
        Input0_ProcessInputRow(Buffer);
    }
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    //Process one row's worth of data by calling "Row."
}

此外,我发现 ProcessInput 方法在 _ProcessInput 和 _ProcessinputRow() 的上游使用。ProcessInput() 是允许您操作作为输入的原始缓冲区数据的方法:

public override void ProcessInput(int InputID, Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer buffer)
{
    IDTSInput100 input = ComponentMetaData.InputCollection.GetObjectByID(InputID);

    while (buffer.NextRow())
    {
        for (int columnIndex = 0; columnIndex < input.InputColumnCollection.Count; columnIndex++)
        {
            IDTSInputColumn100 inputColumn = input.InputColumnCollection[columnIndex];
            var test = buffer[columnIndex];
        }
    }
}

我不确定为什么有必要使用 ProcessInput(),但很高兴知道它可用。要回答我的问题,_ProcessInputRow() 是用于处理通过输入传入的数据的正确方法。

于 2015-11-20T12:29:42.643 回答