當數據流元件將轉換套用至數據行數據、從來源擷取數據或將數據載入目的地時,可能會發生錯誤。 錯誤經常因為非預期的數據值而發生。 例如,數據轉換失敗,因為數據行包含字串而不是數位,插入資料庫數據行會失敗,因為數據是日期,而且數據行具有數值數據類型,或表達式因為數據行值為零而無法評估,導致數學運算無效。
錯誤通常分為下列其中一個類別:
數據轉換錯誤,如果轉換導致重大數位遺失、微不足道的數位遺失,以及字串截斷,就會發生此錯誤。 如果不支援要求的轉換,也會發生數據轉換錯誤。
當在執行期間評估的表達式執行了無效操作,或因數據缺失或不正確導致語法錯誤時,就會發生表達式評估錯誤。
查閱錯誤在查閱作業未能在查閱表格中找到匹配項時發生。
許多數據流元件都支援錯誤輸出,可讓您控制元件如何處理傳入和傳出數據中的數據列層級錯誤。 您可以藉由設定輸入或輸出中個別數據行的選項,指定元件在截斷或發生錯誤時的行為。 例如,您可以指定當客戶名稱資料被截斷時元件應該無法運作,但忽略另一欄位中包含較不重要資料的錯誤。
錯誤輸出可以連接至另一個轉換的輸入,或載入到與非錯誤輸出不同的目標位置。 例如,錯誤輸出可以連接到衍生欄位轉換,該轉換會為空白欄位提供一個字串。
下圖顯示簡單的數據流,包括錯誤輸出。
除了數據行之外,錯誤輸出還包含 ErrorCode 和 ErrorColumn 資料行 。 ErrorCode 資料行會識別錯誤,而 ErrorColumn 包含錯誤數據行的譜系標識符。 若要檢視這些資料行的元數據,請按下將錯誤輸出連接到數據流中下一個元件的路徑。 在某些情況下, ErrorColumn 數據行的值會設定為零。 當錯誤條件影響整個數據列,而不是單一數據行時,就會發生這種情況。 例如是在查找轉換中失敗的情況。
如需詳細資訊,請參閱 數據流 和 Integration Services 路徑。
如需 Integration Services 錯誤、警告和其他訊息的清單,請參閱 Integration Services 錯誤和訊息參考。
錯誤和截斷選項
錯誤分為兩個類別之一:錯誤或截斷。 錯誤表示明確的失敗,併產生NULL結果。 這類錯誤可能包括資料轉換錯誤或表達式評估錯誤。 例如,嘗試將包含字母字元的字串轉換成數位會造成錯誤。 數據轉換、表達式評估,以及表達式結果指派給變數、屬性和數據行可能會因為不合法的轉換和不相容的數據類型而失敗。 如需詳細資訊,請參閱 轉換 (SSIS 運算式)、 表達式中的 Integration Services 數據類型,以及 Integration Services 數據類型。
截斷比錯誤更不嚴重。 截斷會產生可能可使用或甚至可取的結果。 您可以選擇將截斷視為錯誤或可接受的條件。 例如,如果您要將 15 個字元的字串插入只有一個字元寬的數據行中,您可以選擇截斷字串。
您可以設定來源、轉換和輸出目標如何處理錯誤與截斷。 下表描述選項。
| 選項 | 說明 |
|---|---|
| 失敗元件 | 當發生錯誤或截斷時,資料流程工作將失敗。 失敗是錯誤和資料截斷時的預設狀態。 |
| 忽略失敗 | 會忽略錯誤或截斷,並將數據列導向至轉換或來源的輸出。 |
| 重新導向行 | 錯誤或截斷數據列會導向至來源、轉換或目的地的錯誤輸出。 |
新增錯誤描述
根據預設,錯誤輸出會提供數值錯誤碼,而且通常包含發生錯誤之數據行的標識符。 您可以使用 Script 元件,透過使用單行腳本呼叫 GetErrorDescription 介面的 IDTSComponentMetaData100 方法,將錯誤描述包含在額外的欄中。
組件腳本可以加入資料流的錯誤區段,並且可以插入於您希望擷取錯誤的資料流元件下游的任何地方,不過通常會放在將錯誤資料列寫入目的地之前。 如此一來,腳本只會查閱寫入之錯誤數據列的描述。 例如,數據流的錯誤區段可能會更正某些錯誤,而不會將這些數據列寫入錯誤目的地。 如需詳細資訊,請參閱 使用腳本元件增強錯誤輸出。