2015-10-14 24 views
0

我正在BIDS(SSIS 2008)中工作。我有一個非常簡單的數據流任務,將一個平面文件導入OLE DB表。平面文件有10列,它們都映射到表格中的相應列中。平面文件列分隔符是管道字符,行分隔符是{CR} {LF},並且它沒有標題。在平面文件源上,我將Error和Truncation中的違規行(針對所有10列)重新指向錯誤輸出平面文件。SSIS:不要導入沒有正確列數的行

我每天都在運行這個數據流任務,但我不能保證每個記錄的平面文件總是有10列。所以,由於SSIS有壞習慣(至少在我看來)使用行分隔符作爲最後定義的列的列分隔符,它會嘗試合併行。這意味着如果我的列數不足,那麼並非所有行都將作爲表中的單獨行導入。這也意味着有問題的行不一定會寫入錯誤輸出平面文件。

目前只有兩種情況是(1)文件將具有所需的列數和(2)文件的列數不足。我還沒有看到具有比預期更多列的文件。由於這個文件是在我的單元測試過程中使用的,我不想預先處理文件以獲得正確數量的列。我想讓有問題的行寫入錯誤輸出平面文件(或者,如果不是錯誤輸出平面文件),至少要寫入其他平面文件,而不能導入。我仍然想要導入具有正確列數的行。我怎樣才能做到這一點。

回答

0

但我不能保證每個記錄的平面文件總是有10列 。

imo這是SSIS的交易斷路器,因爲它需要源和目標之間的合同才能正常工作。爲了避免任何錯誤風險或將數據列入錯誤的列,我建議將整行作爲一個非常大的varchar列導入,然後使用T-SQL將它解析爲10列,檢測缺陷並處理他們優雅。