1

これを説明するために最善を尽くします。現在、別のデータベースのテーブルから別のデータベースのテーブルにデータを転送する OLE DB ソースを持つデータ フロー タスクがあります。正常に動作しますが、私が抱えている問題は、複製先テーブルに重複データを追加し続けるという事実です。

そのため、「2012 年 11 月 30 日」の日付に「$56.82」の金額を持つ「13029」の CustomerID が、そのテーブルに複数回表示されます。その宛先テーブルに一意のデータのみを転送できるようにするにはどうすればよいですか?

4

3 に答える 3

3

データを転送するデータフロー タスクでは、ルックアップ変換を挿入できます。ルックアップでは、データ ソース (テーブルまたはクエリ、最も役立つもの) を指定できます。データ ソースを選択したら、[列] ビューに移動して、両方のテーブルの CustomerID、Date、および Amount を接続するマッピングを作成できます。

一般ビューでは、一致/不一致の行で何が起こるかを構成できます。一致しない出力を取得して、DB の宛先に送信するだけです。

于 2012-11-30T15:38:09.807 に答える
2

そのデータがテーブル内で一意である理由を特定する必要があります。顧客テーブルの場合は、おそらく13029の顧客IDです。ただし、顧客注文テーブルの場合は、CustomerIdとOrderDateの組み合わせである可能性があります(同じ日に2つの一意の注文を行った可能性があります)。あなたはあなたのテーブルのデザインに基づいてそれに対する答えを知るでしょう。

その知識があれば、ターゲットテーブルからキーをプルバックするクエリを作成する必要がSELECT CO.CustomerId, CO.OrderId FROM dbo.CustomerOrder COあります。プロセスが現在の年のデータのみを転送することがわかっている場合は、上記のクエリにフィルタを追加して、返される行数を制限します。この理由はメモリの節約です。SSISを高速に実行し、不要な列や行を戻さないようにする必要があります。

データフロー内で、そのクエリを使用してルックアップトランスフォーメーションを追加します。SSISバージョンとして2005、2008、または2012を指定せず、ルックアップトランスフォーメーションに関連する動作が異なります。一般的に言って、あなたがしようとしているのは、一致しない行を特定することです。定義上、不一致とは、それらがターゲットデータベースに存在しないことを意味するため、これらは新しい行です。2005は、すべての行が一致するか、エラーになると想定しています。[エラー出力の構成...]ボタンをクリックして、[行のリダイレクト]を選択する必要があります。2008+には、[一致するエントリがない行を処理する方法を指定する]の下にオプションがあり、[一致する出力がない行をリダイレクトする]必要があります。

次に、一致しない出力ブランチ(2008+)またはエラー出力ブランチ(2005)を取得し、それを宛先に追加します。

このアプローチでカバーされていないのは、ソースシステムが$ 56.82を報告し、ターゲットシステムが$ 22.38(更新)を持っている場合の検出と処理です。それを処理する必要がある場合は、変更検出システムを調べる必要があります。変更を検出して処理するためのオプションについては、 AndyLeonardのStairwaytoIntegrationServicesシリーズの記事を参照してください。

于 2012-11-30T15:58:17.577 に答える
0

T-SQL MERGE ステートメントの使用を検討しましたか? http://technet.microsoft.com/en-us/library/bb510625.aspx

定義されたフィールドで両方のテーブルを比較し、一致するかどうかにかかわらずアクションを実行します。

于 2012-11-30T15:35:11.813 に答える