1

私は、データベースのどこにレコードが複製されているかを特定することが重要なプロジェクトです(Sql Server2005)。重複するレコードを見つけるための明白な方法を知っています。ただし、この場合、プロセスについてはかなり賢くしたいと思います。表には、見込み客(リード)に関する情報が含まれます。初期テーブルはすべてのリードを受け入れます。次に、いくつかのフィールドで照合することにより、リードが重複しているかどうかを確認する重複プロセスを実行します。たとえば、姓、名、電子メール、および郵便番号を照合したい場合があります。これは単なる例ですが、基本的には、さまざまなフィールドを使用してキーを作成し、これが人であるかどうかを確認します。重複していないレコードはファイナルテーブルに入れられます。

これにSSISを使用したいのですが、これを実現するためにSSISを使用する最善の方法がわかりません。誰かが私を正しい方向に導くか、フィールドの組み合わせをチェックすることによってSSISを使用して重複を処理する例へのリンクを提供できますか?

4

3 に答える 3

2

あなたはユーザーを二度と推測しようとして、ユーザーの裏をかくことを試みているように私には思えます。残念ながら、これはほとんどの場合機能しません。実際には、同じ名前で郵便番号が異なる2つのクライアント、またはそのような他の例がある場合があるためです。

あなたの最善の策は、彼らが保存しようとしている顧客がすでに存在することを「提案」することです(そして彼らに複製を見せます)が、とにかく彼らが保存することを許可します。したがって、プロセスはおそらく次のようになる必要があります。

  1. ユーザーが情報を入力して[保存]を押します
  2. システムは基準を使用して潜在的な重複を検出し、ユーザーにプロンプ​​トを表示します
  3. ユーザーはキャンセルまたは確認し、適切なアクションを実行します

重複の可能性がない場合は、手順2〜3を安全にスキップできます。

于 2009-03-16T21:06:58.717 に答える
1
-- List all Duplicates
select m1.lastname, m1.firstname, m1.email, m1.zipcode
from tblMain m1
inner join tblMain m2
on isnull(m1.lastname, '') = isnull(m2.lastname, '')
and isnull(m1.firstname, '') = isnull(m2.firstname, '')
and isnull(m1.email, '') = isnull(m2.email, '')
and isnull(m1.zipcode, '') = isnull(m2.zipcode)
and m1.ID <> m2.ID
order by 1, 2, 3, 4

最新の重複を削除するには、次のようなものを使用します。

delete from tblMain
where ID in 
(
    select m1.ID
    from tblMain m1
    inner join tblMain m2
    on isnull(m1.lastname, '') = isnull(m2.lastname, '')
    and isnull(m1.firstname, '') = isnull(m2.firstname, '')
    and isnull(m1.email, '') = isnull(m2.email, '')
    and isnull(m1.zipcode, '') = isnull(m2.zipcode)
    and m1.ID > m2.ID
)
于 2009-03-16T20:49:06.170 に答える
0

SSISがあなたの問題の答えであるとどうやって確信できるのか分かりません。重複を追加しないようにするために、「最終」テーブルに一意のキーを単純に作成できないのはなぜですか。おそらくあなたはあなたの問題をよりよく説明するべきです...

于 2009-03-16T20:54:04.397 に答える