2011-03-08 113 views
2

最後一行我有一個SSIS 2008腳本組件及其使用方法發現在SSIS腳本組件

Input0_ProcessInputRow(Input0Buffer 行)

處理行。有沒有辦法找到我讀的行是否是數據集中的最後一行?

+0

當你找到最後一行時,你想要做什麼? – grapefruitmoon 2011-03-08 10:09:23

+0

基於最後一行,我需要編寫一些自定義邏輯。 – Kannabiran 2011-03-08 12:16:06

+0

邏輯是否會影響最後一行,整個數據集或填充變量或類似? – grapefruitmoon 2011-03-08 19:50:51

回答

1

我還沒有嘗試過,但是在你的腳本組件之前,在這個任務中添加一個RowCount任務並設置一個變量的值(在這裏稱爲RowCnt,初始化爲0)。然後在你的腳本中,有這樣的事情(確保變量聲明被限制在類中)...

Public Class ScriptMain 
Inherits UserComponent 

Dim iRows As Integer 

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
    iRows = iRows + 1 
    If iRows = Variables.RowCnt Then 
     'Do something here 
    End If 
End Sub 

End Class 

這應該允許你處理最後一行。

+0

謝謝啓示者。這是一個很好的解決方案。 – Kannabiran 2011-03-09 00:40:44

8
if (Row.EndOfRowset()) { // this is the last row } 
+0

我剛剛在用於Visual Studio的BI工具上測試了此模式,但它對我無效。 – 2015-03-26 15:20:31

1

覆蓋的InputRows_ProcessInput方法如下:

public override void InputRows_ProcessInput(InputRowsBuffer Buffer) 
    { 

     while (Buffer.NextRow()) 
     { 
      InputRows_ProcessInputRow(Buffer); 
     } 

     if (Buffer.EndOfRowset()) 
     { 
      //do something 
     } 

    } 
+0

EndOfRowset似乎無法工作 - 我正在使用異步轉換。它從來沒有被發現是真實的 – Kelly 2017-07-11 19:11:11

2

覆蓋InputRows_ProcessInput的解決方案爲我工作。但是,不要使用代碼litterally。方法的名稱取決於您輸入的名稱。在我的情況下,方法的簽名是:

public override void Input0_ProcessInput(Input0Buffer Buffer) 

一個簡單的方法來找出正確的方法是走在了劇本,然後鍵入「base.Input」智能感知應該提供您覆蓋的正確方法。

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

     if (Buffer.EndOfRowset()) 
     { 
      //do something 
     } 
    } 

需要考慮的事情。簡單地檢查「Buffer.EndOfRowset()」在我的情況下是不夠的。我試着在「Input0_ProcessInputRow()」方法之前的「While」循環中檢查它,並且它沒有像我期望的那樣工作。所以我猜「EndOfRowset」發生在最後一行之後。

對不起,我還不能投票。