模擬指令碼元件的錯誤輸出

雖然您無法在指令碼元件中將輸出直接設定為錯誤輸出,以自動處理錯誤資料列,不過可以建立其他輸出並使用指令碼中的條件式邏輯,適時地將資料列導向此輸出,以重新產生內建錯誤輸出的功能。 您可能會想要加入兩個額外的輸出資料行,以接收發生錯誤的資料行之錯誤碼與識別碼,來模擬內建錯誤輸出的行為。

如果想要新增對應至特定預先定義之 Integration Services 錯誤碼的錯誤描述,您可以使用 IDTSComponentMetaData100 介面的 GetErrorDescription 方法,這可透過指令碼元件的 ComponentMetaData 屬性取得。

範例

在此所示的範例使用設定成具有兩個同步輸出之轉換的指令碼元件。 指令碼元件的目的在於從 AdventureWorks 範例資料庫的地址資料中,篩選出錯誤資料列。 這個虛構的範例是假設,我們正在為北美的客戶準備促銷活動,並且需要篩選出不在北美的地址。

若要設定範例

  1. 在建立新指令碼元件之前,建立連接管理員並設定資料流程來源,以便從 AdventureWorks 範例資料庫選取地址資料。 就這個只查看 CountryRegionName 資料行的範例而言,您可以直接使用 Person.vStateCountryProvinceRegion 檢視,或是聯結 Person.Address、Person.StateProvince 和 Person.CountryRegion 資料表以選取資料。

  2. 將新指令碼元件加入資料流程設計師介面,並將它設定為轉換。 開啟指令碼轉換編輯器

  3. 在 [指令碼] 頁面上,將 ScriptLanguage 屬性設定成您要用以撰寫指令碼的指令碼語言。

  4. 按一下 [編輯指令碼] 以開啟 Microsoft Visual Studio Tools for Applications (VSTA)。

  5. 在方法中 Input0_ProcessInputRow ,輸入或貼上如下所示的範例程序代碼。

  6. 關閉 VSTA。

  7. 在 [輸入資料行] 頁面上,選取您要在指令碼轉換中處理的資料行。 此範例只使用 CountryRegionName 資料行。 您保留未選取的可用輸入資料行,將會在資料流程中傳遞時保持不變。

  8. 在 [ 輸入和輸出 ] 頁面上,新增第二個輸出,並將其值設定 SynchronousInputID 為輸入的標識碼,這也是 SynchronousInputID 默認輸出的 屬性值。 ExclusionGroup將這兩個輸出的 屬性設定為相同的非零值(例如 1),表示每個數據列只會導向兩個輸出的其中一個。 提供特殊的名稱給新錯誤輸出,例如 "MyErrorOutput"。

  9. 將額外輸出資料行加入新錯誤輸出,以擷取所需的錯誤資訊,這可能包含發生錯誤的資料行之錯誤碼與識別碼,以及或許還有錯誤描述。 此範例會建立新資料行 ErrorColumn 與 ErrorMessage。 如要擷取自己實作中的預先定義 Integration Services 錯誤,請務必新增錯誤號碼的 ErrorCode 資料行。

  10. 請記下指令碼元件將檢查錯誤條件之輸入資料行的識別碼值。 這個範例使用此資料行識別碼以擴展 ErrorColumn 值。

  11. 關閉指令碼轉換編輯器

  12. 將指令碼元件的輸出附加至適當的目的地。 一般檔案目的地對於特定測試而言是最容易設定的。

  13. 執行封裝。

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)  
  
  If Row.CountryRegionName <> "Canada" _  
      And Row.CountryRegionName <> "United States" Then  
  
    Row.ErrorColumn = 68 ' ID of CountryRegionName column  
    Row.ErrorMessage = "Address is not in North America."  
    Row.DirectRowToMyErrorOutput()  
  
  Else  
  
    Row.DirectRowToOutput0()  
  
  End If  
  
End Sub  
public override void Input0_ProcessInputRow(Input0Buffer Row)  
{  
  
  if (Row.CountryRegionName!="Canada"&&Row.CountryRegionName!="United States")  
  
  {  
    Row.ErrorColumn = 68; // ID of CountryRegionName column  
    Row.ErrorMessage = "Address is not in North America.";  
    Row.DirectRowToMyErrorOutput();  
  
  }  
  else  
  {  
  
    Row.DirectRowToOutput0();  
  
  }  
  
}  

Integration Services 圖示 (小型) 使用 Integration Services 保持最新狀態
如需來自Microsoft的最新下載、文章、範例和影片,以及來自社群的所選解決方案,請流覽 MSDN 上的 Integration Services 頁面:

流覽 MSDN 上的 Integration Services 頁面

如需這些更新的自動通知,請訂閱頁面上可用的 RSS 摘要。

另請參閱

資料中的錯誤處理
使用資料流程元件中的錯誤輸出
使用指令碼元件建立同步轉換