次の方法で共有


参照変換

更新 : 2006 年 12 月 12 日

参照変換は、入力列のデータを参照データセットの列と結合することにより参照を実行します。参照データセットには、既存のテーブルまたはビュー、新しいテーブル、または SQL ステートメントの結果を使用できます。参照変換は OLE DB 接続マネージャを使用して、参照データセットの基になるデータを含むデータベースに接続します。詳細については、「OLE DB 接続マネージャ」を参照してください。

参照変換は、次の方法で構成できます。

  • 参照データセットを含むテーブルまたはビューを指定します。
  • SQL ステートメントを指定して、参照テーブルを生成します。
  • 入力と参照データセット間の結合を指定します。
  • 参照データセットの列を変換出力に追加します。
  • パフォーマンスが向上するように、キャッシュする SQL ステートメントを使用して、参照データセットの一部またはすべてをキャッシュするように指定します。
  • キャッシュされた SQL ステートメントのパラメータを、入力列にマップします。
  • 32 ビット環境および 64 ビット環境の参照変換で使用できるメモリの容量 (MB) を指定します。32 ビット環境には 3,072 MB の制限がありますが、64 ビット環境には制限はありません。

参照変換は、変換入力の値と参照データセットの値の間の等結合を実行します。等結合を使用する場合、変換入力の各行は、参照データセットの少なくとも 1 行と一致する必要があります。参照データセットに一致するエントリがない場合、結合は行われず、参照データセットから値が返されません。これはエラーとなり、変換は失敗します。ただし、エラーを無視するか、またはエラー出力にエラー行をリダイレクトするように構成されている場合を除きます。参照テーブル内の複数のエントリが一致する場合、参照クエリに基づいて最初に一致したエントリのみが返されます。完全な事前キャッシュを使用するように参照変換が構成されていない限り、複数のエントリが一致しても、エラーや警告は生成されません。完全な事前キャッシュを使用している場合、複数のエントリが一致してキャッシュがいっぱいになると、警告が生成されます。

複合結合の場合、変換入力の複数の列を参照データセットの列に結合できます。この変換では、DT_R4、DT_R8、DT_TEXT、DT_NTEXT、または DT_IMAGE データ型以外のすべてのデータ型の列を結合できます。詳細については、「Integration Services のデータ型」を参照してください。

通常、参照データセットの値が、変換出力に追加されます。たとえば、参照変換により、入力列の値を使用してテーブルから製品名を抽出し、製品名を変換出力に追加できます。参照テーブルの値によって列の値を置換したり、値を新しい列に追加できます。

参照変換が実行する参照では、大文字と小文字は区別されます。データの大文字と小文字の違いによる参照エラーが発生しないようにするには、最初に文字マップ変換を使用してデータを大文字または小文字に変換し、次に、参照テーブルを生成する SQL ステートメントに UPPER または LOWER 関数を含めます。詳細については、「文字マップ変換」、「UPPER (Transact-SQL)」、および「LOWER (Transact-SQL)」を参照してください。

参照の際にキャッシュを使用せず、大文字と小文字を区別しないデータベースから読み取ることによっても、参照エラーを回避できます。

この変換は、1 つの入力、1 つの標準出力、および 1 つのエラー出力をとります。

キャッシュの種類

参照データセット用のメモリは、次の方法で割り当てることができます。

  • 完全な事前キャッシュ。入力を処理する前に、参照データセットをすべて読み取ります。これが既定のキャッシュの種類です。完全な事前キャッシュが使用されるように参照変換を構成するには、[参照変換エディタ][詳細設定] タブのオプションをすべて選択解除します。
  • 部分キャッシュ。参照変換のときに、参照データを読み込むキャッシュのサイズを指定します。このオプションは、キーによるアクセスをサポートする接続でのみ使用できます。部分キャッシュが使用されるように参照変換を構成するには、[参照変換エディタ][詳細設定] タブで、[メモリの制限を有効にする] を選択してから、[キャッシュを有効にする] または [SQL ステートメントを変更する] を選択するか、[キャッシュを有効にする][SQL ステートメントを変更する] の両方を選択します。
  • キャッシュなし。行セットの各行ごとに参照データセットにアクセスします。キャッシュが使用されないように参照変換を構成するには、[参照変換エディタ][詳細設定] タブで、[メモリの制限を有効にする] を選択し、これ以外のオプションをすべて選択解除します。

[詳細設定] タブの詳細については、「[参照変換エディタ] ([詳細設定] タブ)」を参照してください。

参照操作で NULL 値を含む列の照合が行われると、部分キャッシュまたはキャッシュなしを使用するように構成された参照変換は失敗します。ただし、OR ISNULL(ColumnName) 条件を含む SQL ステートメントを手動で更新する場合は除きます。完全な事前キャッシュを使用する場合、参照操作は成功します。

ms141821.note(ja-jp,SQL.90).gifメモ :
NULL 値が含まれる可能性のある列は、できるだけ参照操作に使用しないようにしてください。列に NULL 値が含まれる場合、エラー出力を使用して、参照テーブル内の照合先のない行を別の変換出力に送るように、参照変換を構成します。または、NULL 値の参照操作をサポートする完全キャッシュの使用を検討します。

Integration Services と SQL Server では、文字列の比較方法が異なります。参照変換が完全な事前キャッシュを使用するように構成された場合は、Integration Services ではキャッシュ内の比較を参照します。それ以外の場合、参照操作ではパラメータ化された SQL ステートメントを使用します。SQL Server では比較を参照します。これは、参照変換ではキャッシュの種類に応じて、同じ参照テーブルで一致する数が異なる場合があることを意味します。

キャッシュする SQL ステートメント

参照変換は、キャッシュする SQL ステートメントを使用するように構成できます。この SQL ステートメントは、参照データセットのサブセットを選択してサイズを制限できます。参照データセットが非常に大きい場合、キャッシュするステートメントを使用すると、参照データセットで使用するメモリ量を制限できます。

キャッシュする SQL ステートメントでは、WHERE 句の値またはパラメータを使用できます。このパラメータは入力列にマップされ、実行時に入力列の値で更新されます。

参照変換のトラブルシューティング

Microsoft SQL Server 2005 Service Pack 2 (SP2) からは、参照変換による外部データ プロバイダの呼び出しをログに記録できるようになりました。この新しいログ機能を使用すると、参照変換が実行する外部データ ソースからキャッシュへのデータ格納に関するトラブルシューティングを行えます。参照変換による外部データ プロバイダの呼び出しのログを記録するには、パッケージ ログ記録を有効にして、パッケージ レベルで Diagnostic イベントを選択する必要があります。詳細については、「パッケージ実行のトラブルシューティング」を参照してください。

参照変換の構成

プロパティを設定するには SSIS デザイナから行うか、またはプログラムによって設定します。

[参照変換エディタ] ダイアログ ボックスで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。

[詳細エディタ] ダイアログ ボックスには、プログラムによって設定できるプロパティが反映されます。[詳細エディタ] ダイアログ ボックスまたはプログラムで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。

プロパティの設定方法の詳細については、次のトピックのいずれかを参照してください。

参照

概念

あいまい参照変換
用語参照変換
パッケージのデータ フローの作成
Integration Services の変換

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

新しい内容 :
  • UI を使用してさまざまなキャッシュの種類を有効にする方法に関する情報を追加しました。
  • 変換による外部データ プロバイダの呼び出しに関するトラブルシューティングのためにユーザーが使用できる新しいログ メッセージが、SQL Server 2005 SP2 に含まれているという情報を追加しました。

2006 年 4 月 14 日

新しい内容 :
  • 32 ビット環境および 64 ビット環境のキャッシュ サイズを指定する機能について説明しました。
  • 異なるキャッシュの種類を使用する影響に関する情報を追加しました。

2005 年 12 月 5 日

変更内容 :
  • 照合の動作を具体的に記述しました。