1

2枚のExcelファイルがあります。私は何をする必要がありますか:

  1. 1 番目のシートから Id を読み取ります (1 行 1 列のみ)
  2. そのような ID を持つレコードがデータベースに存在するかどうかを確認します (図 1)。

ここに画像の説明を入力

  1. 前の条件が満たされた場合、2 番目のシート (多くの行) からデータを読み取る必要があります

  2. #3 から data と #1 から id をストアド プロシージャに渡して実行します。

    この図は、ユーザー データを含む 2 番目のシートを読み取り、ストアド プロシージャに渡します。 ここに画像の説明を入力

しかし、アイテム1〜4を機能させるためにそれを1つのスキームに組み合わせる方法がわかりません。

4

1 に答える 1

1

だから...私があなたの質問を正しく理解していると思うなら...あなたがしたいのはそのExcelID値を変数に保存し、それをパート2のデータフローに派生列として追加することです。

したがって、パッケージは次のようになります。

SQLタスクの実行

ConnectionType EXCEL、ConnectionはExcel接続、結果セットは「単一行」、SQLステートメントは「selecttop 1 * from[SheetNameWithDataSourceIDGoesHere$]」です。結果セットは、結果名「0」を変数名にマップします(これをUser :: DataSourceIDと呼びます)。

データフロータスク

出典:Excelシート

派生列:これをDataSourceIDと呼び、値はUser::DataSourceIDです。

ルックアップ:データソースを検索している場所に対して。データ変換とストアドプロシージャに向かう一致出力はありません。


凝ったものにしたい場合は、最初のタスクの後に2番目のExcecute SQLタスクを含めることができます。SQLStatementSourceの式を使用して、データソースIDを含むデータベーステーブルに対して実行します。

何かのようなもの:

"select count(1) as DataSourceIDExists from DATASOURCELOOKUPTABLE where DataSourceID = " + (DT_WSTR,50)@User::DataSourceID

次に、それを「単一行」のResultSetにマップし、結果名「0」をUser::DataSourceIDExistsにマップします。次に、そのタスクの後に、次の式で優先順位制約を使用します。

(User::DataSourceIDExists == 0)

データフロータスクに進んでExcelデータをロードするかどうかを判断します。あなたはまだ完全なSSISエキスパートではないように思われるので、これは優れた学習機会として役立つかもしれません。

于 2013-01-18T15:26:34.137 に答える