2010年3月28日 星期日

SSIS的ErrorCode

SSIS的資料流程工作,若轉換流程中發生錯誤,將會導致轉換失敗,若不想讓轉換失敗,是可以設定錯誤輸出將錯誤的資料列導向另一各目的地,像我是直接導到文字檔,該文字檔除了資料列本身的欄位外,還會有ErrorCode 和 ErrorColumn這兩各欄位資訊,不過這兩個欄位只包含數字碼,一開始根本看不懂是什,之後我發現ErrorColumn是指發生錯誤資料行的識別碼,原來是可以在資料來源的進階編輯器\輸入與輸出屬性\輸出資料行\通用屬性裡的ID即是該錯誤資料行的識別碼,如下圖

知道這個,至少知道是哪個欄位有問題了,但還是不知道問題原因,後來又發現線上叢書,加入錯誤流程重新導向裡有提到可使用指令碼元件來存取 Integration Services API 及取得該錯誤的描述,我像發現新大陸一樣的開心,趕緊試一試,結果一執行就出錯,
災難性的失敗 (發生例外狀況於 HRESULT: 0x8000FFFF (E_UNEXPECTED))
我想說不會吧,該不會又是.NET Framework版本的問題,因為之前好幾次都是因為.NET 版本有bug造成的,但我找了各簡單的例子試又不會,於是又上網找找看,在Error Output's Description站上發現好東西,上面除了提供2005與2008的Error Output's Description元件供下載使用外,還有各工具SSIS Error Code Description可以去下載來使用,只要輸入Errror Code可得知真正的Error Description喔,我馬上輸入-2146232009試試,這是造成crash的那個Error Code,結果跟我說是未知的Error Code,我這時想說難道Integration Services API 有bug嗎?遇到未知的Error Code,程式沒處理好所以crash掉了,很有可能喔

好吧,我在找找看,然後我想說線上叢書難道沒有這類的資訊供參考嗎?應該會有吧,果然真的有耶,2005版的是英文,2008有中文的喔, Integration Services 錯誤和訊息參考,裡面有提到"清單中看不到您的錯誤,表示該錯誤是由 Integration Services 之外的元件所引發",那我的猜測很有可能,因為錯誤不是Integration Services元件造成的,所以無法處理非Integration Services元件的Error Code,程式又沒例外處理,所以就...

到這裡,我想為了Error Description而使用Integration Services API會有各風險,因為若不是 Integration Services元件引發的錯誤,程式很可能會crash掉,所以還是少用吧,就手動查好囉,我個人的意見啦,聽聽就好

對了,順便一提-2146232009錯誤碼應該是AS400元件造成的,我的資料來源端是AS400,其中中文欄位有0E0F不成對的問題,在某些狀況下這會造成轉檔過程發生錯誤喔,某些狀況指的是.NET Framework不同而以差異,有的版本沒事,有的版本有事,參考囉

0 意見:

張貼留言