我在數據流任務中出錯。我有一個ado.net源去異步腳本組件。SSIS:從outputbuffer中刪除空行
問題就來了,在從腳本組件到目的地,它
試圖把空行它的輸出緩衝區會自動將我的表中插入的盡頭。
有沒有辦法來防止這種情況發生/我如何操作輸出緩衝區,以便我可以從中刪除特定的行?
我在數據流任務中出錯。我有一個ado.net源去異步腳本組件。SSIS:從outputbuffer中刪除空行
問題就來了,在從腳本組件到目的地,它
試圖把空行它的輸出緩衝區會自動將我的表中插入的盡頭。
有沒有辦法來防止這種情況發生/我如何操作輸出緩衝區,以便我可以從中刪除特定的行?
你說源代碼去了一個異步腳本組件。如果這是真的,那麼當行進入輸出緩衝區時,您已經在控制它。
默認情況下,腳本組件是同步的。每個輸入行都有一個輸出行。也許這是你目前設置的。
如果你想使用腳本組件作爲一個異步組件,你必須做到以下幾點:
當你編輯腳本,你可以使用OutputBuffer.AddRow方法在輸出緩衝器來創建新行。每次調用AddRow時,現有的緩衝區內容都將從腳本組件中發出,並在下一行中清除。使用您的規則來跳過行,您將在添加或跳過行之前驗證輸入緩衝區。
爲了解決這個問題,我添加了條件拆分組件,並在其中一個空白列(即len([testfield])> 0)上添加了長度檢查。然後,我將那些帶有支票的字段發送到數據庫,而對另一個分支沒有做任何事情。
問題似乎是SSIS在PreExecute期間執行AddRow()函數。然後這往往會與您在public override void ProcessInputRow()
函數中使用AddRow()的任何衝突發生衝突。例如PreExecute會創建一個新行來消除事件,然後手動創建一個新行作爲處理的一部分,現在您有兩個新行,其中第一行充滿NULLS並已傳遞到outputbuffer。要解決這個問題,我會覆蓋CreateNewOutputRows()
,並將其保留爲空,而不是隻根據需要添加行。如果正確的數據沒有顯示在輸入緩衝區中,我的一些異步腳本根本不會在輸出緩衝區中添加任何行。
public class ScriptMain : UserComponent {
public override void CreateNewOutputRows() {}
public override void Input_ProcessInputRow(InputBuffer Row) {
if(asNeeded) {
OutputBuffer.AddRow();
}
}
}