我有一個即使輸入錯誤也不會出錯的SSIS包。在我的情況下,這個包從平面文件中讀取並將記錄放入SQL Server表中。很簡單,沒有什麼奇特的事情在這裏發生。即使輸入數據不正確,SSIS包也不會失敗
平面文件被定義爲正確的,每行80個字符,總共可能有10列。問題:有時平面文件沒有填充到80個字符,所以我們得到可變長度的行,而不是填充其餘的空格。發生這種情況時我們希望失敗。
在我的平面文件源組件中,我設置了錯誤輸出部分,以便如果任何列被截斷,組件將失敗。但是由於某些原因,即使沒有導入行,我從Visual Studio運行包時,所有步驟都是綠色的。這裏是我得到的輸出:
SSIS包「SSIS包01.dtsx」開始。
信息:0x4004300A將數據導入到Table01,DTS.Pipeline:驗證階段開始。
信息:0x4004300A將數據導入到Table01,DTS.Pipeline:驗證階段開始。
信息:0x40043006在數據導入Table01,DTS.Pipeline:準備執行階段正在開始。
信息:0x40043007將數據導入到Table01,DTS.Pipeline:預執行階段開始。
信息:0x402090DC在數據導入到Table01,平面文件源[1]:文件的處理 「C:\ import_files \ sampledata.dat」 已經開始。
信息:0x4004300C在導入數據到表01,DTS.Pipeline:執行階段開始。
警告:0x8020200F在數據導入到Table01,平面文件源[1]:有一個在文件的結尾部分行。
信息:0x402090DE在數據導入到Table01,平面文件源[1]:文件 「C:\ import_files \ sampledata.dat」 處理的數據行的總數爲0。
信息:0x402090DF在將數據導入到Table01,OLE DB目標[5467]:數據插入的最終提交已開始。
信息:0x402090E0在導入數據到Table01,OLE DB目標[5467]:最後提交的數據插入已經結束。
信息:0x40043008將數據導入到Table01,DTS.Pipeline:後期執行階段開始。
信息:0x402090DD在數據導入到Table01,平面文件源[1]:文件的處理 「C:\ import_files \ sampledata.dat」 已經結束。
信息:0x40043009將數據導入到Table01,DTS.Pipeline:清理階段開始。
信息:0x4004300B在導入數據到Table01,DTS.Pipeline: 「組件 」OLE DB目標「(5467)」 中寫道0行。
....因此沒有記錄被導入,並且有關於部分行的警告,但是包成功完成。當這個軟件包輸入一個好的輸入文件時,每行有80個字符,它將導入與文件中一樣多的行,而沒有問題。
奇怪的是我們有其他SSIS包失敗時,可變長度的行被用作輸入。我已經看過,並將這些軟件包與此進行了比較,並且對於我的生活而言,他們看不到他們可能做的不同。
如果您有任何想法或線索,我可以關注我會很感激。謝謝!