最後一行我有一個SSIS 2008腳本組件及其使用方法發現在SSIS腳本組件
Input0_ProcessInputRow(Input0Buffer 行)
處理行。有沒有辦法找到我讀的行是否是數據集中的最後一行?
最後一行我有一個SSIS 2008腳本組件及其使用方法發現在SSIS腳本組件
Input0_ProcessInputRow(Input0Buffer 行)
處理行。有沒有辦法找到我讀的行是否是數據集中的最後一行?
我還沒有嘗試過,但是在你的腳本組件之前,在這個任務中添加一個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
這應該允許你處理最後一行。
謝謝啓示者。這是一個很好的解決方案。 – Kannabiran 2011-03-09 00:40:44
if (Row.EndOfRowset()) { // this is the last row }
我剛剛在用於Visual Studio的BI工具上測試了此模式,但它對我無效。 – 2015-03-26 15:20:31
覆蓋的InputRows_ProcessInput方法如下:
public override void InputRows_ProcessInput(InputRowsBuffer Buffer)
{
while (Buffer.NextRow())
{
InputRows_ProcessInputRow(Buffer);
}
if (Buffer.EndOfRowset())
{
//do something
}
}
EndOfRowset似乎無法工作 - 我正在使用異步轉換。它從來沒有被發現是真實的 – Kelly 2017-07-11 19:11:11
覆蓋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」發生在最後一行之後。
對不起,我還不能投票。
當你找到最後一行時,你想要做什麼? – grapefruitmoon 2011-03-08 10:09:23
基於最後一行,我需要編寫一些自定義邏輯。 – Kannabiran 2011-03-08 12:16:06
邏輯是否會影響最後一行,整個數據集或填充變量或類似? – grapefruitmoon 2011-03-08 19:50:51