OLE DB ソース
OLE DB ソースは、データベース テーブル、ビュー、または SQL コマンドを使用して、OLE DB に準拠するさまざまなリレーショナル データベースからデータを抽出します。たとえば、OLE DB ソースにより、Microsoft Office Access または SQL Server データベースのテーブルからデータを抽出できます。
注意 |
---|
データ ソースが Microsoft Office Excel 2007 である場合、Excel の以前のバージョンとは異なる接続マネージャが必要になります。詳細については、「Excel ブックに接続する方法」を参照してください。 |
OLE DB ソースには、データを抽出するために、次の 4 つの異なるデータ アクセス モードが用意されています。
テーブルまたはビュー。
変数で指定されたテーブルまたはビュー。
SQL ステートメントの結果。クエリにはパラメータ化クエリを使用できます。
変数に格納された SQL ステートメントの結果。
パラメータ化クエリを使用すると、変数をパラメータにマップして、SQL ステートメント内の個別のパラメータの値を指定できます。
OLE DB ソースは、OLE DB 接続マネージャを使用してデータ ソースに接続します。OLE DB 接続マネージャは、使用する OLE DB プロバイダを指定します。詳細については、「OLE DB 接続マネージャ」を参照してください。
Integration Services プロジェクトでは、OLE DB 接続マネージャを作成できるデータ ソース オブジェクトも用意されています。このオブジェクトは、データ ソースとデータ ソース ビューを OLE DB ソースで使用できるようにします。詳細については、「データ ソース (SSIS)」および「データ ソース ビュー (SSIS)」を参照してください。
OLE DB プロバイダによっては、OLE DB ソースに次のような制限が生じる場合があります。
Oracle 用の Microsoft OLE DB プロバイダは、Oracle データ型の BLOB、CLOB、NCLOB、BFILE、および UROWID 型をサポートしていないため、OLE DB ソースは、これらのデータ型の列が含まれるテーブルからデータを抽出できません。
IBM OLE DB DB2 プロバイダおよび Microsoft OLE DB DB2 プロバイダは、ストアド プロシージャを呼び出す SQL コマンドの使用をサポートしていません。この種類のコマンドを使用すると、OLE DB ソースは列のメタデータを作成できません。その結果、データ フロー内で OLE DB ソースの後に実行されるデータ フロー コンポーネントでは、使用できる列データがないため、データ フローの実行が失敗します。
OLE DB ソースは、1 つの標準出力と 1 つのエラー出力をとります。
パラメータ化された SQL ステートメントの使用
OLE DB ソースは、SQL ステートメントを使用してデータを抽出できます。使用できるのは、SELECT ステートメントまたは EXEC ステートメントです。
OLE DB ソースは、OLE DB 接続マネージャを使用して、データの抽出元からデータ ソースに接続します。OLE DB 接続マネージャが使用するプロバイダ、および接続マネージャの接続先であるリレーショナル データベース管理システム (RDBMS) によって、異なる規則がパラメータの名前付けや一覧表示に適用されます。パラメータ名が RDBMS から返される場合、パラメータ名を使用して、パラメータ リストのパラメータを SQL ステートメントのパラメータにマップできます。それ以外の場合は、パラメータがパラメータ リストの序数位置によって SQL ステートメントのパラメータにマップされます。サポートされるパラメータ名の種類は、プロバイダによって異なります。たとえば、変数名または列名の使用を必要とするプロバイダや、0 や Param0 などのシンボルの名前の使用を必要とするプロバイダがあります。SQL ステートメントで使用するパラメータ名の詳細については、プロバイダ固有のマニュアルを参照してください。
OLE DB 接続マネージャを使用する場合、パラメータ化サブクエリは使用できません。これは、OLE DB ソースが OLE DB プロバイダを介してパラメータ情報を取得できないからです。ただし、式を使用することで、パラメータ値をクエリ文字列に連結したり、ソースの SqlCommand プロパティを設定したりできます。SSIS デザイナでは、[OLE DB ソース エディタ] ダイアログ ボックスを使用して OLE DB ソースを構成し、[クエリ パラメータの設定] ダイアログ ボックスで変数にパラメータをマップします。
序数位置を使用したパラメータの指定
パラメータ名が返されない場合は、[クエリ パラメータの設定] ダイアログ ボックスの [パラメータ] ボックスの一覧にパラメータが表示されている順序で、実行時にパラメータがどのパラメータ マーカーにマップされるかが決まります。一覧に表示されている最初のパラメータは SQL ステートメントの最初の ? にマップされ、2 番目のパラメータは 2 番目の ? にマップされ、それ以降同様にマップされます。
次の SQL ステートメントは、AdventureWorks データベースの Product テーブルから行を選択します。[マッピング] ボックスの一覧に表示される最初のパラメータは Color 列の最初のパラメータに、2 番目のパラメータは Size 列にマップされます。
SELECT * FROM Production.Product WHERE Color = ? AND Size = ?
パラメータ名は順序に影響しません。たとえば、パラメータの名前が適用先の列と同じ名前で、そのパラメータが [パラメータ] ボックス内の正しい序数位置にない場合も、実行時に行われるパラメータ マッピングには、パラメータ名ではなく、パラメータの序数位置が使用されます。
通常、EXEC コマンドでは、プロシージャのパラメータ値を指定する変数の名前をパラメータ名として使用する必要があります。
名前を使用したパラメータの指定
実際のパラメータ名が RDBMS から返される場合、SELECT ステートメントと EXEC ステートメントで使用されるパラメータは名前によってマップされます。このパラメータ名は、SELECT ステートメントまたは EXEC ステートメントによって実行されるストアド プロシージャで必要な名前と一致する必要があります。
次の SQL ステートメントは、AdventureWorks データベースで利用できる uspGetWhereUsedProductID ストアド プロシージャを実行します。
EXEC uspGetWhereUsedProductID ?, ?
このストアド プロシージャでは、パラメータ値を指定するために変数 @StartProductID と @CheckDate を必要としています。パラメータが [マッピング] ボックスの一覧に表示される順序は関係ありません。ここで必要となるのは、パラメータ名が、@ 記号を含めて、ストアド プロシージャの変数名と一致することのみです。
パラメータの変数へのマッピング
パラメータは、実行時にパラメータ値を提供する変数にマップされます。Integration Services に用意されているシステム変数を使用することもできますが、通常はユーザー定義変数を使用します。ユーザー定義変数を使用する場合、この変数に設定するデータ型は、パラメータ参照がマップされている列のデータ型との互換性があることを確認してください。詳細については、「Integration Services の変数」を参照してください。
OLE DB ソースのトラブルシューティング
OLE DB ソースによる外部データ プロバイダの呼び出しをログに記録できます。このログ機能を使用すると、OLE DB ソースによる外部データ ソースからのデータ読み込みに関するトラブルシューティングを行うことができます。OLE DB ソースによる外部データ プロバイダの呼び出しのログを記録するには、パッケージ ログ記録を有効にして、パッケージ レベルで Diagnostic イベントを選択します。詳細については、「パッケージ実行のトラブルシューティング」を参照してください。
OLE DB ソースの構成
プロパティはプログラムによって設定するか、または SSIS デザイナから設定できます。
[OLE DB ソース エディタ] ダイアログ ボックスで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。
[詳細エディタ] ダイアログ ボックスには、プログラムによって設定できるプロパティが反映されます。[詳細エディタ] ダイアログ ボックスまたはプログラムで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。
プロパティの設定方法の詳細については、次のトピックのいずれかを参照してください。
|