3

顧客からデータ フィードを受け取り、毎回ほぼ同じスキーマを取得しますが、顧客がサード パーティのアプリケーションを使用しているため、顧客側で変更される可能性があります。データ ファイルを受け取ると、各データ ファイル (学生、出席者など) のテーブルを含むステージング データベースにデータをインポートします。次に、そのデータをその顧客のデータベースに既に存在するデータと比較し、前回の実行から変更されたデータ (列が変更されたか、行全体が削除された可能性がある) を確認します。次に、更新された値または削除された行を監査テーブルに書き込み、前のデータ インポートから変更されたデータを確認できるようにします。データ自体を更新したくはありません。2 つのデータセットの違いを記録したいだけです。その後、顧客データベースからすべてのデータを削除し、変更せずに新しいデータ ファイルからデータをそのままインポートします (この指示は継承されており、変更できません)。大きな問題は、これを動的に行う必要があることです。顧客はテーブルをカスタマイズできるため、顧客から取得するスキーマが正確にはわからないからです。宛先にあるテーブルとその構造を動的に判断し、ソースを見て値を比較して、データの変更点を確認できる必要があります。お客様はテーブルをカスタマイズできるため、お客様からの情報を得ることができます。宛先にあるテーブルとその構造を動的に判断し、ソースを見て値を比較して、データの変更点を確認できる必要があります。お客様はテーブルをカスタマイズできるため、お客様からの情報を得ることができます。宛先にあるテーブルとその構造を動的に判断し、ソースを見て値を比較して、データの変更点を確認できる必要があります。

追加情報: ソースには ID 列はありませんが、個別の行を構成する代理キーとして使用できる列がいくつかあります。

別の参照テーブルの各テーブルの代理キーに対してそれを行う必要があるかもしれませんが、値をハードコーディングすることなく、テーブルごとにこれを一般的に実行できるようにしたいと考えています。

SSIS、SP、トリガーなど、より意味のある方を使用できます。私は tablediff を含め、すべてを見てきましたが、必要なものがすべて揃っているようには見えません。または、それらに入るとロジックが非常に複雑になり始めます。

もちろん、誰かがすでに行ったこのようなことの具体的な例は大歓迎です。

他に役立つ情報があれば教えてください。

ありがとう

4

2 に答える 2

2

私は同様の問題に取り組み、一連のメタデータ テーブルを使用してデータセットを動的に比較しました。これらのメタデータ テーブルは、ステージングする必要があるデータセットと、各テーブルのビジネス キーとして機能する列 (およびそのデータ型) の組み合わせを記述しています。

このようにして、完全な外部結合を実行して 2 つの違いを見つける SQL クエリを (たとえば、SSIS スクリプト コンポーネントを使用して) 動的に作成できます。

独自のメタ データを SQL Server のメタ データ (sys.* または INFORMATION_SCHEMA.* を使用) と結合して、列がまだソースに存在し、データ型が予想どおりかどうかを検出できます。

一致しないメタデータを評価のためにエラー フローにリダイレクトします。

この作業方法は非常に危険ですが、メタ データを適切に管理すれば実行できます。

于 2012-04-11T08:14:19.783 に答える
1

2つのテーブルを比較して何が違うのかを確認したい場合、キーワードは「例外」です。


select col1,col2,... from table1
except
select col1,col2,... from table2

これにより、table2にないtable1のすべてが得られます。


select col1,col2,... from table2
except
select col1,col2,... from table1

これにより、table1にないtable2のすべてが得られます。


2つのテーブルにある種の有用で耐久性のある主キーがあると仮定すると、両方のセットのすべてが変更になります。最初のセットのすべてが挿入物です。2番目のセットのすべてが削除です。

于 2012-04-10T19:54:45.487 に答える