3

SSISで2つのテーブルを同期する必要があるシナリオがあります

Table AはDATABASEAにありTABLE B、DATABASEBにあります。両方のテーブルのスキーマは同じです。表Aと表Bを次のように同期するSSISパッケージが必要です。

1. It inserts all the records That Exist in Table A into Table B

2. Update TABLE B if Same "Key" exsit in Both but Updated records in Table A

たとえば、テーブルAとBの両方にKey = 123が含まれています。両方とも、テーブルAのいくつかの列が更新されています。

マージ結合の使用を考えていますが、これは新しいレコードの挿入にのみ役立ちます。UPDATEを実装する方法も教えてください

4

1 に答える 1

2
1.It inserts all the records That Exist in Table A into Table B 

ルックアップ変換を使用します。ソースはになりTable A、ルックアップはになりTable Bます。両方のテーブルの共通列をマップし、挿入に必要な列を選択します。ルックアップを使用OLEDB destinationし、ルックアップからの列をマップして、に挿入します。Table B

2.Update TABLE B if Same "Key" exsit in Both but Updated records in Table A

上記と同じロジック。使用する代わりにルックアップをOLEDB Destination使用OLEDB Commandしてから、更新sqlを記述します。

Update TableB
Set col1=?,col2=?....

列マッピングマップでは、lookup

この記事を チェックしてくださいレコードが存在するかどうかを確認し、存在する場合は更新してください。

マージの使用:

MERGE TableB b
USING TableA a
ON b.Key = a.Key
WHEN MATCHED AND b.Col1<>a.Col1 THEN
UPDATE
SET b.Col1 =  a.Col1 
WHEN NOT MATCHED BY TARGET THEN
INSERT (Col1, Col2, col3)
VALUES (a.Col1, a.Col2,a.Col3);

でMergeSQLを実行できExecute SQL TaskますControl Flow

アップデート :The Lookup transformation tries to perform an equi-join between values in the transformation input and values in the reference dataset.

必要なデータフロータスクは1つだけです。

ダイアグラム

ここに画像の説明を入力してください

ターゲットテーブルデータのソーステーブルに一致する値がない場合、ルックアップはターゲット行をoledb宛先にリダイレクトし、データをソーステーブルに挿入します(Lookup No Match Output

ターゲットテーブルの行がビジネスキーとソーステーブルで一致すると、一致した行がに送信されOledb Command、Update SQLを使用して、ルックアップからのすべてのターゲット行がソーステーブルで更新されます。

これは単なる概要です。列の変更に関係なく行が一致するとソーステーブルが更新されるため、上記の設計には問題があります。上記の記事を参照するか、ssisでSCDコンポーネントを検索してみてください。

Update 2:

MERGE TableB b
USING TableA a
ON b.Key = a.Key
WHEN MATCHED  THEN
UPDATE
SET b.Col1 =  a.Col1 
WHEN NOT MATCHED BY TARGET AND a.IsReady=1 THEN  --isReady bit data type
INSERT (Col1, Col2, col3)
VALUES (a.Col1, a.Col2,a.Col3);
于 2012-12-17T09:56:11.557 に答える