次の方法で共有


スクリプト コンポーネントに対するエラー出力のシミュレート

新規 : 2005 年 12 月 5 日

エラー行の自動処理のスクリプト コンポーネントでエラー出力として出力を直接構成することはできませんが、別の出力を作成するか、可能な場合はスクリプトで条件ロジックを使用してこの出力に行を送信することによって、組み込みエラー出力の機能を再現することができます。2 つの出力列を追加してエラー番号、およびエラーが発生した列の ID を受け取ることにより、組み込みエラー出力の動作を模倣することもできます。

事前定義された特定の Integration Services エラー コードに対応するエラーの説明を追加する場合は、IDTSComponentMetaData90 インターフェイスの GetErrorDescription メソッドを使用できます。これは、スクリプト コンポーネントの ComponentMetaData プロパティから使用できます。

次に示す例では、2 つの同期出力を持つ変換として構成された、スクリプト コンポーネントを使用します。このスクリプト コンポーネントの目的は、AdventureWorks サンプル データベースの住所データから、エラー行をフィルタ選択することです。この架空の例では、北米の顧客向けプロモーションを準備中であり、北米以外の住所をフィルタによって除外する必要があるものとします。

例を構成するには

  1. 新しいスクリプト コンポーネントの作成前に、接続マネージャを作成し、AdventureWorks サンプル データベースから住所データを選択するデータ フローの変換元を構成します。この例では CountryRegionName 列のみを調べるので、単純に Person.vStateCountryProvinceRegion ビューを使用できます。また、Person.AddressPerson.StateProvince、および Person.CountryRegion の表を結合して、データを選択することもできます。

  2. 新しいスクリプト コンポーネントを [データ フロー] デザイナ画面に追加し、変換として構成します。[スクリプト変換エディタ] を開きます。

  3. [入力列] ページで、スクリプト変換で処理する列を選択します。この例では CountryRegionName 列のみを使用します。選択しなかった使用可能な入力列は、データ フロー内で変更されず、そのまま渡されます。

  4. [入力および出力] ページで、2 つ目の新しい出力を追加し、その SynchronousInputID 値を入力の ID に設定します。これは、既定の出力の SynchronousInputID プロパティの値でもあります。両方の出力の ExclusionGroup プロパティを 0 以外の同じ値 (たとえば 1) に設定し、各行が 2 つの出力のうち一方のみに送られるようにします。新しいエラー出力に、"My Error Output" などのわかりやすい名前を付けます。

  5. 必要なエラー情報を取得するため、追加の出力列を新しいエラー出力に追加します。エラー コード、エラーが発生した列の ID、エラーの説明などを含めることができます。この例では、新しい列 ErrorColumn および ErrorMessage を作成しています。事前定義された Integration Services エラーを独自の実装で検出する場合、エラー番号用の ErrorCode 列を必ず追加してください。

  6. スクリプト コンポーネントがエラー状態を確認する入力列 (複数の場合もある) の ID 値を書き留めます。この例では、この列 ID を使用して ErrorColumn 値を設定します。

  7. [スクリプト] ページの [スクリプトのデザイン] をクリックして、Visual Studio for Applications (VSA) スクリプト環境を開きます。Input0_ProcessInputRow メソッドに、以下に示すサンプル コードを入力するか貼り付けます。

  8. VSA IDE と [スクリプト変換エディタ] を閉じます。

  9. スクリプト コンポーネントの出力を、適切な変換先にアタッチします。アドホック テスト用に最も構成しやすいのは、フラット ファイル変換先です。

  10. パッケージを実行します。

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

参照

概念

データ フロー コンポーネントでのエラー出力の使用
スクリプト コンポーネントによる同期変換の作成

その他の技術情報

データのエラー処理

ヘルプおよび情報

SQL Server 2005 の参考資料の入手