在SSIS脚本组件中,ProcessInput()和Input0

编程入门 行业动态 更新时间:2024-10-24 04:47:06
在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()的场景是什么?

谢谢。

I have always assumed that the Input0_ProcessInputRow(Input0Buffer Row) method runs once for every row being passed through the script component:

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

I have recently discovered another method called ProcessInput(int inputID, PipelineBuffer buffer) and am wondering if I am doing something wrong by never using it.

What are the scenarios where I would use Input0_ProcessInputRow() vs ProcessInput()?

Thanks.

最满意答案

经过一些研究后发现,使用_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()是用于处理通过输入传入的数据的正确方法。

After doing some research, it turns out that using the _ProcessInputRow() method is the correct way to process inputs in an SSIS Script Component.

What I discovered in my research is that _ProcessInput() can be used to manually iterate over the Buffer and send results to _ProcessInputRow() (however it is not necessary to do so unless yo uhave a reason to):

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." }

Additionally, I found that the ProcessInput method is use even further upstream from _ProcessInput and _ProcessinputRow(). ProcessInput() is the method that allows you to manipulate the raw buffer data coming in as an input:

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

I'm not sure why it would ever be necessary to use ProcessInput(), but it's nice to know it is available. To answer my question, _ProcessInputRow() is the correct method to use in order to process data coming in through an input.

更多推荐

本文发布于:2023-08-04 13:35:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1416097.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:脚本   组件   SSIS   ProcessInput

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!