4

Oracle DBから1200万近くのレコードをインポートしたいのですが、SSISメモリバッファの問題のため、2005年から2012年までの各年(7回)にデータフロータスクを繰り返す必要があります。foreachを使用してデータを年ごとにフェッチするにはどうすればよいですか。

クエリ

SELECT * FROM EMP_RECORDS_DETAILS WHERE to_char(JOIN_DT,'YYYY')=2005

4

1 に答える 1

6

私はSQLServerを使用して上記の問題を解決しました。したがって、変更する必要があるのはSelectクエリだけです。

  1. まず、各年の日付を格納する変数を作成します。

     Name: TimeValue  DataType=Int32
    
  2. ForEachループを使用して、[コレクション]タブで[ForeachItem列挙子]を選択します

新しい列

  1. [列]タブをクリックして、データ型intの新しい列を作成します

  2. 変数マッピングマップで、上記で作成された変数。

マッピング

  1. データフロー内でoledb宛先を使用し、データアクセスモードでsqlコマンドを選択します。where句のクエリを変更し、*を指定する代わりに列を選択してみてください。

SQLクエリ

  1. [パラメーター]タブをクリックして、foreachループ用に作成されたパラメーターをマップします

パラメータのマッピング

dateの値が以前にわからない場合は、foreachループの前にexecute sql taskを使用し、テーブルからdateTime列の値のみを選択して変数に格納し、foreachループでコレクションの変数列挙子からForeachを使用できます。タブをクリックし、上記の実行SQLタスクで作成された変数を選択します。

これがあなたに役立つことを願っています。

于 2012-06-13T06:23:14.633 に答える