0

テーブル A を持つトランザクション データベース TD があります。テーブル B を持つ別のレポート データベース RD があります。テーブル B は、列とデータ型に関してテーブル A とまったく同じです。

テーブル A をテーブル B にコピーする必要があります

テーブル A の詳細: 1) テーブル A はトランザクション テーブルで、毎日新しいトランザクションが追加されます。2) また、テーブル A には既存のトランザクションに対する更新が毎日あります。トランザクションに更新がある場合に更新されるupdateddateという列があります。

私が従っている方法: トランザクションデータベースからレポートデータベースに初めてデータをコピーするSSISパッケージを作成しました。テーブルBにRDUpdateddateという新しい列を作成して、各レコードが更新された時間を挿入しました。

毎晩実行する SqlServerJob として設定した別の SSIS パッケージを作成しました。RDUpdateddateの後に実行されたすべてのトランザクションを取得し、それらをステージング テーブルにコピーします。次に、ストアド プロシージャを使用して、テーブル B を挿入および更新します。

この方法は機能しますが、SSISパッケージ自体ですべてを行うより効率的な方法があるかどうか知りたいです

4

1 に答える 1

2

この場合、私が通常行うことは次のようなものです。 ここに画像の説明を入力

あなたが何をしているのかをよく理解していれば、テーブル B で作成したフィールドRDUpdateddateを使用せずにレジスタが変更されたかどうかを特定することはできません。各テーブルでハッシュ フィールドを使用できます。それをクエリに追加するだけで、テーブル内で物理的にではなく、パッケージを実行するたびに更新する必要があります

その後、レジスターが新しいか古いかを取得するテーブル A を左のテーブルとして結合し、テーブル B の 1 つのフィールドを使用してそれを識別します。フィールドが null の場合は、それが存在しないためです。

条件付き分割では、テーブル B の列を使用して知っているかどうかを確認し、既に存在する場合は更新する方法をお勧めします。

編集:

2 つのテーブルを比較できるようにするには、テーブル A で次のようなクエリを作成します。

SELECT id, field1, field2, CHECKSUM(field1, field2) HASH_TOTAL FROM Table_A

そして、表 B の次のようなクエリ:

SELECT id, field1, field2, CHECKSUM(field1, field2) HASH_TOTAL FROM Table_B

次に、条件付き分割で、値がテーブル B の値と等しいか、異なるか、または存在しないかを評価します。


お役に立てば幸いです。

于 2013-04-24T22:10:19.343 に答える