2011-12-19 96 views
1

使用SQL 2008 R2,我創建了一個SSIS包,該包通過平面文件進行分解並將它們導入到SQL表中。在SSIS包中記錄/電子郵件跳過的記錄

如果數據文件中的任何記錄不包含所有必填字段,則應在導入過程中跳過該記錄。所有跳過的記錄應在電子郵件完成時通過電子郵件發送給我。

Here's the data file structure: 
123|ABC|Y|Y 
784 
456|DEF|Y|Y 
789|GHI|Y|N 
812||Y|N 
... 

所以,在這種情況下,我想第一,第三和第四個創紀錄的進口,而第二和第五記錄跳過並通過電子郵件發送。

我試圖爲正在測試了這一點,並且由於它尋找一個豎線分隔符,它讀取第二行連同第三爲:

784456|DEF|Y|Y 

我3天左右的老SSIS的工作,所以如果有人能幫助我完成這項任務,我會很感激。

回答

0

這些文件有多大?一種方法是使用臨時表。不是臨時表..臨時表是保留其在數據庫中的物理表。您將所有記錄轉儲到那裏,然後將良好數據插入到生產/主表中,然後將不良行導出到您可以附加到sendmail任務的文件中。

(然後您可以截斷臨時表下一個區間/運行/循環/文件)

另一種方法是使用條件分割,然後將每一行設置爲一個變量,然後將格式應用於它,附加一個分隔符,而不是一個管道,然後到導出文件。

+0

這些文件是40k行...我認爲我的問題是我如何從壞壞中分類好... – tjans 2011-12-20 22:42:03

0

由於它將第二行與第三行合併,它聽起來像行3中的行分隔符不正確,或者它在連接管理器中未正確設置。我會看看Notepad ++中的文件(或者是一個暴露隱藏字符如Cr和Lf的文本編輯器),並驗證每行的行分隔符是否一致,並且它與連接管理器中設置的內容相匹配。

一旦行分隔符問題被整理出來,您可以使用條件分割來分隔錯誤的記錄。在條件下,鍵入[YourColumnName] ==「」並在輸出名稱下鍵入錯誤。將默認輸出名稱命名爲「正確」。現在,將「Correct」輸出映射到您的表格,並將「Error」輸出映射到平面文件,腳本組件,表格或您希望錯誤發生的任何格式。

+0

那麼,行被設置在每個字段的分隔符設置爲|並且最後一個字段被設置爲Lf。所以,爲什麼它合併它們是有道理的,因爲如果它沒有找到管道,它會一直搜索直到它結束。至於你的解決方案,我會在一週內考察這個條件分裂,看看我能否弄清楚。假期前我可能不會這樣做,但假如我在假期後得到答案並且它可以正常工作,我會接受您的答案... – tjans 2011-12-20 22:40:16

+0

它仍然在我看來像平面文件是問題所在。它正在合併行,因爲它沒有找到行分隔符。如果Lf在第3行的最後,它會認識到該行已經完成並開始新行。我強烈建議您下載Notepad ++並從這裏確認:http://notepad-plus-plus.org/download/v5.9.6.2.html。否則,你可能會追逐你的尾巴。 – brian 2011-12-21 03:53:28