2017-10-20 309 views
0

以下情景: 1.有N個作業 2.作業按順序每天將數據寫入同一文件 3.任務設置指示文件是否應該被覆蓋或追加到SQL Server 2016 SSIS有條件地覆蓋文本文件

我已經試過迄今爲止在使用conditional splitdata flow

conditional split

對其進行測試,案例1 & 2:

enter image description here

實際發生的事情是,有條件拆分試圖制定出要發送的數據行,其中,最終將所有行一邊,0行其他雙方最終打開文件(我認爲),因此錯誤:

enter image description here

,我感到我正在濫用conditional split這裏,但來了一個,這是2017年外,該必須是一個辦法做到這一點,而不訴諸腳本任務清理文件?

回答

1

您的問題 - 您錯用了條件拆分;它旨在處理數據流中的數據行,並嘗試管理控制流。說到SSIS,它不會提前知道您將只使用平面文件目的地中的一個;它試圖初始化兩者。通過這樣做,SSIS嘗試從兩個目標打開相同的文件,並失敗並出現錯誤。
您可以使用SSIS方式處理任務 - 使用任務管理控制流。在你的情況下,目標文件應該被追加或被覆蓋。但被覆蓋的內容可以被視爲被零線覆蓋,然後被追加。幸運的是,SSIS覆蓋文件事件,沒有記錄來自數據流。
因此,在您的數據流應該總是附加數據之前,您將創建另一個始終接收零數據行的數據流(該列中的列可以是任意的),並覆蓋文件平面文件目標。然後使用具有優先約束的控制流的條件執行來執行此「文件清理DataFlow任務」。您可能還需要在此「文件清理DataFlow任務」上設置DelayValidation=true

+0

感謝您的回答。我已經通過參數化的「刪除文件」任務將邏輯移動到了控制流程中。 – Tsar