2

これができるかどうかはわかりませんが、基本的には次のデータフローがあります。 SSIS インポート

  1. XML ファイルからデータを抽出します (正常に動作します)。
  2. 囲まれた条件に基づいてレコードを単純に分割します(正常に動作します)
  3. いくつかの文字セットの問題により、派生列オブジェクトを追加する必要がありました (より良い方法かもしれませんが、機能します)

ここで、「ステップ 4」では、データベースに対応する一致がある値のみを挿入したいというシナリオに直面しています。たとえば、XML には約 6000 のレコードがあり、それらから、おそらく6000個すべてを挿入して事後に比較するのではなく、10個を照合して挿入する必要があります(これも実行できますが、別の方法があることを望んでいました)。ファイル内のID値が一致するOLE DB DESTINATIONオブジェクト内でSQL挿入コマンドを実行できるかもしれないと考えていましたが、それが100%明確ではないか、それが可能かどうかさえわかりません。単純に一時テーブル ルートに移動して事後にデータをスクラブする必要がありますか、それとも宛先ピースで直接これを行うことができますか? どんな提案でも大歓迎です。

編集

billinkc からの最後のコメントのおかげで、一致を特定してその結果セットを使用できるように、少し近づくことができましたが、どういうわけか、データ フローを 2 回実行しているように見えます。それが原因であるかどうかを確認するためにオブジェクトを外に出し、どういうわけかそうであるように思われます.ルックアップを追加してこのフロー全体を2回実行する理由は何ですか? データ ビューアーの出力で確認した合計 8 つの一致があるはずですが、同じファイルに対して 2 回目の実行が行われているようです。

ここに画像の説明を入力

4

1 に答える 1

3

Lookup 変​​換を使用して既存のレコードを検索できない理由はありますか? 不一致レコードを不一致出力にルーティングし、一致が見つかったコネクタのみを「Navigator Staging Manager Funds」に接続するように構成します。

私はそれがあなたの質問に答えていると信じていますが、あなたは正しい欲求を表現しているのだろうか? 私の仮定では、ルックアップは既存の宛先に反するため、ルックアップは行の ID 10 を返します。SSIS の既定の宛先はすべて挿入のみを実行するため、一致が見つかった行は 2 倍になります。既存の行を探しているので、通常は更新を実行する必要があることを意味します既存の行に。その場合、特別に設計された変換である OLE DB コマンドがあります。更新を可能にするコンポーネントです。そのコンポーネントにはパフォーマンス上の問題があり、それを通過する行ごとに 1 つの更新ステートメントを発行します。10列なら大丈夫だと思います。それ以外の場合、使用するパターンは、すべての新しい行 (挿入) を宛先テーブルに書き込み、次にすべての変更された行 (更新) を 2 番目のステージング タイプのテーブルに書き込むことです。データ フローが完了したら、SQL 実行タスクを使用してセット ベースの更新ステートメントを実行します。

組み合わせたアップサートを処理するサードパーティのオプションがあります。Pragmatic Worksにはオプションがあり、タスクとコンポーネントのサイトにはおそらく他のオプションがあることを知っています。

于 2012-06-15T14:31:00.070 に答える