【SSIS Lightning】ODBC 接続を利用してデータフロータスクにデータをパイプする
シナリオと要件
SSIS で利用するメインの接続は,[OLE DB 接続] です。
しかし,まだまだ今まで使い慣れた,または動かせない環境として作りこんでしまった,[ODBC],[DSN] ベースの接続を生かしたいという要件がやはりあるようです。
もちろん,SSIS パッケージ化を機に [OLE DB 接続] に切り替えることをお勧めしますが,
現実に必要な [ODBC 接続] に対応しないわけにもいきません。
ここでは,[ODBC] を利用して [データフロー] 内にデータをパイプする方法を解説します。
この記事は,
SQL Server 2005 Developer Edition Service Pack 1
Integration Services に基づいて記述しています。
[ODBC 接続の接続マネージャ] を試してみる
今回は,[データフロー] 内に [ODBC] からデータをパイプすることが目標なので,単一の [データフロータスク] を作成してこれに [ODBC] からデータを流し込みます。
1 [制御フロー] ペインで [データフロータスク] を1つ作成する。
2 [接続マネージャ] ペインで右クリックして,[新しい接続] をクリックする。
3 [SSIS 接続マネージャの追加] ウィンドウで [ODBC] を選択して [追加] をクリックする。
4 [ODBC 接続マネージャの構成] ウィンドウで使用したい [ODBC] を構成する。
ここまでで,[ODBC 接続] は正しく作成できました。
さて,ではこの接続をどのデータソースに接続してデータを取得するのでしょうか?
実は,[OLE DB ソース]はもちろんのこと,[Excel ソース] なども,前提とするのは [OLE DB 接続] であって,[ODBC 接続] はそもそも設定できません。
唯一使用できそうな [DataRader ソース] の接続に設定しても
「ランタイム接続マネージャから,マネージ接続を取得できません」というエラーが表示されて実際には使用できないのです。
[ADO.NET 接続] を使用する
素直に [ODBC 接続] を構成しても,[データフロー] には対応するデータソースがありません。
では,どうすれば [ODBC] を利用してデータをパイプできるのでしょうか?
[ADO.NET 接続] を [ODBC] を用いて構成するというのが一番素直にできる構成のようです。
1 [接続マネージャ] ペインで右クリックして,[新しい ADO.NET 接続] をクリックする。
2 [ADO.NET の接続マネージャの構成] ウィンドウで [新規作成] をクリックする。
3 [接続マネージャ] ウィンドウで [プロバイダ] を [.NET プロバイダ\Odbc Data Provider] に設定し,必要な設定を行う。
4 [Data Reader ソース] を1つ作成して,プロパティを開く。
5 [接続マネージャ] タブで,[接続マネージャ] に今作成した [ADO.NET 接続] を設定する。
6 後は,[コンポーネントのプロパティ] タブで [SqlCommand] などを設定することで,ソースを構成できるようになります。
以上の手順で,[ADO.NET 接続] と [Data Reader ソース] を用いて [ODBC] からデータをパイプすることができます。
ポイントは,[ODBC 接続] という接続マネージャに惑わされないことですね。
ヒント
[ODBC 接続] はなぜ存在するのかについて
データソースに接続できないのに,[ODBC 接続] はなぜ存在するのでしょうか?
将来のソースの増強に対応しているのでしょうか?
もちろんその可能性もありますが,答えは [制御フロータスク] にあります。
[SQL 実行タスク] の [ConnectionType] を [ODBC] に設定してあげることによって,[ODBC 接続] を有効な接続として設定できるようになります。
このタスクを利用すれば,[ODBC 接続] を使用した [SQL 実行タスク] の結果セットを [データフロー] にパイプするということもできるんですね。
written by TimberLandChapel