• 検索結果がありません。

ここまでの手順では、「列 0」列のエラー発生時に「エラー行」と「エラー番号」をフゔ゗ルへ書き込むこと ができましたが、エラー番号だけではどういったエラーなのかがよく分かりません。そこで、エラー番号を もとにエラー メッセージを取得するようにパッケージを変更して、エラーの内容を分かりやすくしてみまし ょう。これを行うには「スクリプト コンポーネント」を利用します。

スクリプト コンポーネント の配置

1. まずは、スクリプト コンポーネントを配置する前の作業として[フラット フゔ゗ル ソース]

から[フラット フゔ゗ル変換先]へ伸びている赤い矢印を右クリックして、[削除]をクリッ クし、削除しておきます。

2. 次に、[ツールボックス]から[データ フロー変換]カテゴリの[スクリプト コンポーネン ト]をドラッグ ゕンド ドロップして[フラット フゔ゗ル変換先]の上部へ配置します。

すると、[スクリプト コンポーネントの種類を選択]ダ゗ゕログが表示されるので、[変換]

が選択されていることを確認して、[OK]ボタンをクリックします。

3. 次に、[フラット フゔ゗ル ソース]をクリックして表示される赤い矢印を[スクリプト コン ポーネント]まで伸ばします。

右クリック 1

2

1

2

3

これにより、[エラー出力の構成]ダ゗ゕログが表示されるので、「列 0」列のエラーの情報を 取得できるようにするために、「列 0」の[エラー]列が「行のリダイレクト」になっている ことを確認して、[OK]ボタンをクリックします。

スクリプトの作成(C# コードの記述)

4. 次に、[スクリプト コンポーネント]をダブル クリックして、[スクリプト変換エディタ]ダ

゗ゕログを表示します。

5. 続いて、次のように[入力列]ページをクリックして、[ErrorCode]にチェック マークを つけます。

1

2

3

ダブル クリック 1

これにより、エラー発生時に[フラット フゔ゗ル ソース]からエラー番号を取得できるよう になります。

6. 続いて、取得したエラー番号からエラー メッセージを取得するための列を追加します。次の ように[入力および出力]ページをクリックし、[出力 0]を展開して[出力列]フォルダを 選択した状態で、[列の追加]ボタンをクリックします。

すると、次のように追加する列の名前を入力できるようになるので、今回は「ErrDesc」と入 力します。

1

2

1

2

3

右側のプロパテゖ画面では、[DataType]を「文字列」へ、[Length]を「100」へ設定しま す。

7. 続いて、エラーの説明を取り出すスクリプトを記述するために、次のように[スクリプト]ペ ージをクリックして、[スクリプトの編集]ボタンをクリックします。

8. これにより、「スクリプト エディタ」が起動されるので、次のように[プロジェクト エクス プローラ]で[main.cs]を開き、「public override void 入力 0_ProcessInputRow(~)」

内に、次のコードを入力します。

Row.ErrDesc = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);

1

2

1

2

こ の コ ー ド 内 の Row は 、 今 ま さ に 処 理 を し て い る 該 当 行 を 意 味 し て い ま す 。

「Row.ErrorCode」と指定することで、手順 20 で受け取った ErrorCode 列のデータ(エ ラー発生時のエラー番号)を取得でき、「GetErrorDescription」メソッドへこの番号を与え ることで、エラー番号に対応したエラーの説明(エラー メッセージ)を取得できるようにな ります。また、「Row.ErrDesc」は、手順 6 で作成した「ErrDesc」列で、この列へエラー メ ッセージを代入するという意味です。

入力後、保存してスクリプト エデゖタを閉じます。

9. [スクリプト変換エディタ]ダ゗ゕログへ戻ったら、[OK]ボタンをクリックして閉じます。

1 3

4

入力

2

1

エラーの説明をファイルへ書き込む

10. スクリプト コンポーネントで取得したエラーの説明をフゔ゗ルへ書き込むようにするために、

次のように[スクリプト コンポーネント]の緑色の矢印を[フラット フゔ゗ル変換先]まで 伸ばします。続いて、[フラット フゔ゗ル変換先]をダブル クリックします。

これにより、[フラット フゔ゗ル変換先エデゖタ]ダ゗ゕログが表示されるので、[新規作成]

ボタンをクリックします。

11. [フラット フゔ゗ル形式]ダ゗ゕログが表示されたら、[区切り記号](カンマ区切り)が選 択されていることを確認して、[OK]ボタンをクリックします。

12. 次に、[フラット フゔ゗ル接続マネージャ エデゖタ]ダ゗ゕログが表示されるので、今回は

[接続マネージャ名]へ「エラーの説明を書き込む_errOut2」とし、[フゔ゗ル名]へ

「C:\errOut2.txt」と入力します。

3

ダブル クリック 2

緑色の矢印をドラッグ

& ドロップして伸ばす 1

1

2

13. 続いて、[詳細設定]ページをクリックして、列のプロパテゖを確認します。

[ErrDesc]列を選択して、手順 6 で設定したように、[DataType]が「文字列」で、

[OutputColumnWidth]が「100」となっていることを確認し、[OK]ボタンをクリックし ます。

14. [フラット フゔ゗ル変換先エデゖタ]ダ゗ゕログへ戻ったら、[マッピング]ページをクリッ クして、フゔ゗ルへ書き込むデータのマッピングを設定します。

1

2

1

2

4

5 3

[使用できる入力列]の「ErrDesc」列を[使用できる変換先列]の「ErrDesc」列へドラッ グ ゕンド ドロップして、スクリプト コンポーネント で取得したエラー メッセージをフゔ

゗ルへ書き込むようにします。

転送の実行と結果の確認

15. ここまでの設定を確認するために、[デバッグ]メニューから[デバッグ開始]をクリックし て、パッケージを実行します。

すべてのコンポーネントが緑色に変わって、データ転送が成功したことを確認できます。

16. 確認後、[デバッグ]メニューから[デバッグの停止]をクリックして、デバッグを終了しま す。

1

2

3

1

2

17. 転送されたデータを確認するために、Management Studio から、[ABC]テーブルを右クリ ックして[上位 1000 行の選択]をクリックします。

正しいデータのみが追加され、エラーが発生した行は追加されていないことを確認できます。

18. 次に、エクスプローラから C:\errOut2.txt フゔ゗ルを開いて、内容を確認します。

今度は、エラー番号に加えて、エラー メッセージ(エラーの説明)も取得できていることを 確認できます。このように、スクリプト コンポーネントを利用すると、エラーが発生した該 当行を取得して、かつエラーの内容を確認できるようになるので、大変便利です。

19. 最後に、[フゔ゗ル]メニューの[すべてを保存]をクリックして、ここまで作成した Integration Services プロジェクトを保存しておきます。

1

2

3 エラーでない行のみが 追加

2

データ型が変換できなかったという 主旨のエラーの説明が追加 1

ST S TE E P P 6 6. . Fo F or r ea e a c c h h ルー ル ープ プと とブ ブレ レー ーク ク ポ゗ ポ ゗ン ント ト

この STEP では、複数フゔ゗ルを読み込む際に便利な Foreach ループ コンテナや、

デバッグ機能のブレーク ポ゗ントの設定方法などを説明します。

この STEP では、次のことを学習します。

 Foreach ループ コンテナによる複数フゔ゗ルの読み取り

 ブレーク ポ゗ントの設定

6.1 Foreach Loop コンテナによる複数ファイルの読み取り

Foreach Loop コンテナを利用すると、同じフォルダ内の複数のフゔ゗ルのデータをまとめて読み取って、

転送させることができるようになります。この Step では、Step5 で作成した「SSISstep5」プロジェク トへ Foreach Loop コンテナを追加し、サンプル スクリプトにある「import」フォルダ内のテキスト フ ゔ゗ルをすべて取り込む手順を説明します。

転送するデータ

転送後のデータ

ABC.TXT

DEF.TXT

GHI.TXT MISS.TXT

作成するパッケージ

Foreach Loop コンテナの配置

1. まずは、Business Intelligence Development Studio を起動し、次のように[フゔ゗ル]メ ニューの[開く]から[プロジェクト/ソリューション]をクリックして、「C:\SSISstep5」

フォルダの「SSISstep5.sln]フゔ゗ルを選択し、Step5 で作成した「SSISstep5」プロジ ェクトを開きます。

2. Foreach ループ コンテナを利用するには、次のように[制御フロー]タブで、[ツールボッ クス]の[制御フロー項目]カテゴリの中から[Foreach ループ コンテナ]をドラッグ ゕ

STEP 5 で作成した データ フロー タスク

Foreach ループ コンテ ナを追加して「import」

フォルダ内のフゔ゗ルを すべて読み取り、データ フロー タスクへ渡す

1

2

3

ンド ドロップして配置します。

3. 次に、[データ フロー タスク]を[Foreach ループ コンテナ]の枠の中へドラッグ ゕンド ドロップして移動します。

Foreach ループ コンテナの対象の設定

4. 次に、Foreach ループ コンテナの対象(繰り返し読み取るデータ)を設定するために

[Foreach ループ コンテナ]をダブル クリックして、[Foreach ループ エデゖタ]ダ゗ゕ ログを開きます。

2

1

Foreach ループ コンテナ の中にドラッグ&ドロップ

1

5. 続いて、[コレクション]ページをクリックします。

今回はサンプル スクリプトの中にある「import」フォルダのテキスト フゔ゗ルを対象とす るので、次のように[Enumerator](列挙子)で「Foreach File 列挙子」を選択し、[フォ ルダ]で[参照]ボタンをクリックます([参照]ボタンが表示されない場合は、「Foreach File 列挙子」をもう一度選択し直してみてください)。

[フォルダの参照]ダ゗ゕログで、「import」フォルダを選択し、[OK]ボタンをクリックし ます。

[Foreach ループ エデゖタ]へ戻ったら、次のように[フゔ゗ル]へ「*.txt」と入力しま す。

ダブル クリック 1

1 2

3

4

5

これにより、import フォルダ内の拡張子が「.txt」のフゔ゗ルをすべて読み取れるようにな ります。

6. 次に、読み取ったフゔ゗ルの名前(パス)を変数へ割り当てるために、次のように[変数のマ ッピング]ページをクリックして開き、[変数]で「新しい変数」を選択します。

すると、[変数の追加]ダ゗ゕログが表示されるので、[名前]へ任意の変数名(varFileName など)を入力して、[OK]ボタンをクリックします。

7. [Foreach ループ エデゖタ]へ戻ったら、[OK]ボタンをクリックして閉じます。

1

1

2

3

4