2011-06-21 6 views
0

私は、ソースとSQL ServerのテーブルをExcelに持っています。SSISの2つのソースと更新SQL Serverテーブルを比較しますか?

エクセルソース列

Mno Price1 Price2 
111  10  20 
222  30  25 
333  40  30 
444  34  09 
555  23  abc 

SQL Serverのテーブル

製品テーブル名

PId Mno Sprice BPrice 
    1  111 3  50 
    2  222 14  23 
    3  444 32  34 
    4  555 43  45 
    5  666 21  67 

である私は(SQL Serverの製品テーブルMNOとExcelソースMNO(モデル番号)を比較したいですモデル番号)、それが同じ場合は、SQL Serverの製品テーブルSPriceとBpriceを更新したいと思います。

私は何をしたいのですか教えてください。

エクセルPrice2欄に文字列が、それは文字列値だ場合、私は行データが間違っているメールを送信したい

値持っているので、私は、また、シートをエクセルことを検証します。

SSISの新機能ですので、詳細を教えてください。

答えて

0

個人的には、これを行う最も簡単な方法は、データフローを使用してExcelファイルをステージングテーブルに入れ、必要に応じてクリーンアップすることです。次に、制御フローの次のステップとして、更新を実行するSQl実行タスクがあります。または、レコードが新しい場合は更新または挿入のいずれかが必要な場合は、「Execute SQl」タスクでMergeステートメントを使用します。

0

完全結合結合を使用してマージ結合変換を使用することができます(マージ結合変換に入力する前にデータセットをソートしてください)。その後、出力を条件付き分割変換に移動させます。条件付き分割変換では、行を更新、挿入、または削除する必要があるかどうかを判断し、適切な変換を行うためにフローを指示します。

これは私の頭の上から外れていて、これに対してはより簡単な変換があるかもしれません。私はSSISを使って1年近く働く機会がなかったので、やや錆びているかもしれません。

1

ソース内の新しいデータを読み込み、既存のデータに参照コンポーネントを使用します。ダイレクト・ローは、更新のためのoledbコマンドとマッチしません。また、挿入のための不一致の宛先(新製品を入力する場合)。

+0

これは一般的に「アップサート」と呼ばれます –

+0

実際これはそうです。これは基本的に、SSISで行う最も簡単な方法です。一致するデータが異なるかどうかを気にせずに処理することができます。これは、価格列(または更新する他の列)を条件付き分割してSQLコマンドはすべての行に適用されますが、ソースデータが小さい限り、時間がかかりすぎる可能性があります。 – cairnz

関連する問題