2009-12-04 43 views
0

SSIS包只是從txt文件導入到sql數據庫。當我們使軟件包使用舊文件並且執行得很好時,舊的源文件得到了(10列) 新的源文件有15列。當源文件改變其失敗時,該文件爲 。 [平面文件來源[1]]錯誤:數據轉換失敗。 「列10」列的數據轉換返回狀態值4,狀態文本「文本被截斷或者一個或多個字符在目標代碼頁中不匹配」。 列中的變化產生了問題 如何以更好的方式解決此問題?如果舊格式文件和新格式文件都需要使用相同的Package進行處理。SSIS包失敗Flatfile的新結構

感謝

回答

3

如果我正確理解你的問題,你有一個文件(我假設相同的文件名),要麼有新的或舊的文件格式和失敗,因爲你的平面文件源有老人(10列)數據文件架構只?如果是這種情況,我會創建一個布爾變量並將其稱爲isOldFormat。然後,我會在控制流中使用腳本任務來確定它是否有10列或15列。僞代碼將是這樣的:

1)打開平面文件2)計數根據您的分隔符3)條件Statment列:

如果columns.Count = 10 isOldFormat =真 否則如果列。數= 15 isOldFormat =假 否則 擲錯誤

然後我會創建,將有新的文件格式架構中的另一個數據流(現在基本上有兩個數據流,一個用舊的文件格式和一個與新的一個)。

完成此步驟後,您將優先級約束從腳本任務拖至新創建的數據流,並將一個約束從舊腳本任務拖至舊數據流。通過雙擊您的predence約束,您可以將評估程序操作屬性設置爲Expression,並在Expression框中鍵入@isOldFormat == true,以指向包含舊平面文件源和@isOldFormat == false的數據流的約束用於其他數據流。這樣做只會執行基於腳本任務中設置的變量的一個或另一個數據流。

希望這會有所幫助。

+0

感謝您的好主意。 – rmdussa