0

フラット CSV ファイルを既存のデータベース テーブルにインポートする既存の MS SSDT プロジェクトのデータ フローを作成する必要があります。ここまでは順調ですね。

ただし、列「コード」がデータベースに既に保存されている値と一致するすべてのエントリを拒否したいと思います。さらに良いことに、可能であれば、「コード」列がデータベースのエントリと一致する場合は、「説明」列を更新したいと考えています。重要なことは、どのような状況でも重複するコード エントリを作成してはならないということです。

ありがとう

4

1 に答える 1

0

わかりましたので、私がそれを理解したので、他の誰かがそれを役に立つと思うかもしれないと思いました:

簡単に言うと、データ ソースと宛先の間でルックアップが必要です。この「ルックアップ」は、更新が必要な一致と、新しいテーブル行に直接入力する必要がある新しい値との間でフィルター処理を行います (画像を参照)。 ルックアップ付き SSDT

データベースに一致し、説明を更新する必要がある値は、「OLE DB コマンド」に入力する必要があります。

「ルックアップ」コンポーネント内で、次のことを行う必要があります。

  1. [全般] タブに移動し、[行を一致しない出力にリダイレクトする] を選択します。
  2. 接続タブに移動し、次の SQL を挿入します。

    SELECT id, code FROM tableName
    
  3. [列] タブに移動し、[使用可能なルックアップ列] テーブルの [id] 列を確認します。また、「コード」列をチェックし、対応する「利用可能な入力列」にドラッグして相互にマップし、ルックアップで比較できるようにします。-- この時点で、マッピングが原因でエラーが発生した場合は、setep 2 のコードを次のように置き換えてみてください。

    SELECT id, CAST(code AS nvarchar(50)) AS code FROM tableName
    
  4. エラー出力で、「Lookup Match Output」の下の id に「Copy Column」の説明があることを確認します。

ここで、「OLE DB コマンド」コンポーネントを構成する必要があります。

  1. [接続マネージャー] タブに移動し、コンポーネントが目的の DB に接続されていることを確認します。
  2. 「コンポーネントのプロパティ」に移動し、次のコードを「SQLCommand」プロパティに追加します。

    UPDATE tableName SET description = ? WHERE id = ?
    

    「?」に注意してください。パラメータを「列マッピング」タブに追加する必要があることを示すためにあるはずです。それらを置き換えないでください。

  3. 最後に、[列のマッピング] タブに移動し、Param_0 (最初の?) を [説明] 列に、[Param_1] を [id] 列にマップします。「コード」または db テーブルに含まれる可能性のあるその他の列に対しては、何もする必要はありません。

SQL では通常 1 行のコードで、約 10 の時間のかかるステップで完了するタスクを完了したことに対して、自分自身を大いに褒めてください ;-)

于 2013-02-22T10:48:51.440 に答える