我有一个项目,其中一个重要的部分是识别数据库中的记录重复位置(Sql Server 2005)。我知道找到重复记录的明显方法。但是,在这种情况下,我们希望对该过程相当聪明。表格将包含有关潜在客户(潜在客户)的信息。初始表将接受所有潜在客户。然后,我们将通过一个欺骗过程,通过匹配几个字段来检查潜在客户是否重复。例如,我们可能希望匹配姓氏,名字,电子邮件和邮政编码。这只是一个例子,但基本上我们想要使用各种字段创建一个密钥来知道这是否存在。不是欺骗的记录将进入决赛桌。
我想使用SSIS,但我不确定使用SSIS实现这一目标的最佳方法。有人可以引导我朝着正确的方向,或通过检查字段组合提供使用SSIS来处理欺骗的示例的链接吗?
答案 0 :(得分:2)
在我看来,你试图通过尝试再次猜测它们来试图击败你的用户。不幸的是,这几乎总是不行,因为你可能确实有两个同名的客户端,但不同的zipcodes或其他类似的例子。
您最好的选择是“建议”他们即将保存的客户已经存在(并向他们展示副本),但无论如何都允许他们保存。所以这个过程可能看起来像这样:
如果没有可能的重复,则可以安全地跳过步骤2-3。
答案 1 :(得分: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
)
答案 2 :(得分:0)
我不明白你怎么能确定SSIS是你问题的答案。为什么不能简单地在“最终”表中创建唯一键以确保不添加重复项?也许你应该更好地解释你的问题......