在 SSIS 脚本组件中,ProcessInput() 和 Input0_ProcessInputRow() 有什么区别
In the SSIS Script Component, what is the difference between ProcessInput() and Input0_ProcessInputRow()
我一直假设 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()?
谢谢。
经过一些研究后发现,使用 _ProcessInputRow() 方法是在 SSIS 脚本组件中处理输入的正确方法。
我在研究中发现 _ProcessInput() 可用于手动迭代缓冲区并将结果发送到 _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() 是处理通过输入传入的数据的正确方法。
我一直假设 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()?
谢谢。
经过一些研究后发现,使用 _ProcessInputRow() 方法是在 SSIS 脚本组件中处理输入的正确方法。
我在研究中发现 _ProcessInput() 可用于手动迭代缓冲区并将结果发送到 _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() 是处理通过输入传入的数据的正确方法。