2015-11-06 71 views
1

我一直假定Input0_ProcessInputRow(Input0Buffer行)方法的每一行通過腳本組件傳遞運行一次ProcessInput()和Input0_ProcessInputRow()之間的區別:在SSIS腳本組件,就是

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()的場景是什麼?

謝謝。

回答

1

經過一番研究後,事實證明使用_ProcessInputRow()方法是在SSIS腳本組件中處理輸入的正確方法。

我在研究中發現,那是什麼_ProcessInput()可以用來手動遍歷緩衝區並將結果發送到_ProcessInputRow()(但它是沒有必要做,除非喲uhave理由):

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()是用來處理通過輸入進入的數據的正確方法。