同一のスキーマを持つ 2 つのデータベースに 2 つのテーブルがあります。2 つのデータベースは、別の場所にある別のサーバー上にあります。これで、2 つのデータベース テーブルのいずれかにデータを挿入および更新できるようになりました。要件は、異なるデータベース内の 2 つのテーブルを同期して、常に更新された情報を保持することです。
主キー列は、どちらのデータベース テーブルでも常に一意になります。
SSIS経由でこれを達成する方法は?
よろしくお願いします。
同一のスキーマを持つ 2 つのデータベースに 2 つのテーブルがあります。2 つのデータベースは、別の場所にある別のサーバー上にあります。これで、2 つのデータベース テーブルのいずれかにデータを挿入および更新できるようになりました。要件は、異なるデータベース内の 2 つのテーブルを同期して、常に更新された情報を保持することです。
主キー列は、どちらのデータベース テーブルでも常に一意になります。
SSIS経由でこれを達成する方法は?
よろしくお願いします。
2 で達成できますScript Tasks
。最初のもので:
-- what exists in A and not in B
SELECT * INTO DB1.temp.TBL_A_except FROM
(
SELECT pk FROM DB1.schema1.TBL_A
EXCEPT
SELECT pk FROM DB2.schema2.TBL_B
);
-- what exists in B and not in A
SELECT * INTO DB2.temp.TBL_B_except FROM
(
SELECT pk FROM DB2.schema2.TBL_B
EXCEPT
SELECT pk FROM DB1.schema1.TBL_A
);
二つ目:
INSERT INTO DB2.schema2.TBL_B
SELECT * FROM DB1.temp.TBL_A_except;
INSERT INTO DB1.schema1.TBL_A
SELECT * FROM DB2.schema2.TBL_B_except;
DROP TABLE DB1.temp.TBL_A_except;
DROP TABLE DB2.schema2.TBL_B;
SSIS 変換手法でこれを本当に実現したい場合はCache Connection Manager
、一時テーブル 1 と 2 として 2x の 2 つのデータ フローを使用します。1 つ目はデータをキャッシュに保存し、2 つ目はキャッシュからテーブルにロードします。
また
2 つのデータ フロー。Source
-> Lookup
-> Destination
. ルックアップを実装して、2 番目のテーブルで PK の存在を確認します。レコード Tbl_A の場合、Tbl_B にそのような PK がない場合は、この行を Tbl_B に挿入する必要があることを意味します。No Match Output
、行を目的地に誘導します。