2011-08-16 14 views
2

あるデータベースから別のデータベースに基本ファイルダンプを書きます。私はSSIS 2008を使用しており、MSSQL 2010データベースのデータをMYSQL 5.1データベースに変換するためのパッケージをいくつか作成しています。SSISパッケージで一時テーブルを使用する

すべての接続がセットアップされ、2つのデータベース間でレコードを転送できますが、変換プロセスで一時テーブルを使用し、データフロータスクのMSSQLソースとして一時テーブルを使用してテーブルをMYSQLテーブルを待っています。

これを設定する際に問題が発生しています。私はOLEDB接続を使用しており、RetainSameConnectionプロパティとDelayValidationプロパティをtrueに設定しています。元のFigureをMSSQLデータベースからソースとして設定すると、私は以前のタスクで作成した一時テーブルを制御フローから見つけることができません。これらの2つのタスクで同じ接続マネージャを使用しています。

誰もがこれに関するアイデアや経験がありますか?一つのタスクが行う簡単な例として

...
SELECT * 
INTO #TMP 
FROM CUSTOMERS 

(これは単純化した例であり、私はちょうどので、私と一緒にクマCustomersテーブルを使用することができ、この場合にはrelize) を使用することが可能ですこの一時テーブルは、ソーステーブルとしてのデータフロー操作ですか?

+1

SSISは、設定したタスクとデータフローでスキーマをバインドしようとするため、一時テーブルを使用すると特に気になります。解決策がある場合、私は解決策を見つけませんでした。ステージングテーブルなどを保持するためにSSISスキーマを使用して、これを回避します。 – Yuck

+0

この作品の詳細を熟読した解決策を追加できますか? – JBone

答えて

1

私のコメントで述べたように、それほど多くの解決策や回避策はありません。 SSISは結果セットの形状を使用して、タスクのプロパティをバインドします。データベースで常にテンポラリテーブルが使用できるわけではないため、DelayValidationtrueに設定しても、SSISでエラーが発生する可能性があります。

私の解決方法は、接続先のデータベースにSSISスキーマを作成することです。これを行う理由は、SSISパッケージ(主にステージングテーブル)内でのみ使用されるオブジェクトのセキュリティと明確な分離です。

dboスキーマにテーブルをスローするのではなく、SSISスキーマでテーブルを作成します(恥ずかしいことではありません)。典型的なデータフローは、テーブルの開始時にテーブルを切り捨て、値をロードし、必要な処理を実行します。必要に応じて処理を実行し、必要に応じて切り捨てます。テーブルが常に利用可能である限り、SSISは結果セットの形状を調べることができます。

+0

データをステージングするための良いETLプラクティス+1。 – HardCode

0

選択肢の列が認識されないため、一時表をソースとして使用しないでください。代わりにテーブル変数またはCTEを使用します。

+0

テーブル変数またはCTEが宣言されている場合、それはテーブルから選択するように表示されますか? – JBone

+0

@JBone、それに結合する選択は、SSISがソースデータとして認識するものではありません。 – HLGEM

関連する問題