繁体   English   中英

SQL Server更新,检查重复项

[英]SQL Server Update with check of duplicates

在SQL Server 2008中,我有一个表tblProfile其中包含员工编号( EmID )和profileID( ProID )。 EmID+ProID是组合的主键。

我在EmID上找到了“重复项”,这些重复项来自employee表。 每个员工可以有多个ProID ,但是两个ID的组合是唯一的。

当然,从EmID的侧面看,它们不是重复项,但是在employee表中,它们是重复项。

例如在tblEmployee有:

EmId        Lastname      Firstname   Birthdate  
------------------------------------------------
22          Mayer          Frank      1960-01-01  
23          Meyer          Frank      1960-01-01

现在,我想用这种逻辑“ clean ”表。 清理tblEmployee不是问题,但是如何使用此逻辑清理tblProfile

假设我要删除EmID = 23 ,因为我想保留旧记录。 如果有一个尚未为22定义的EmID = 23的现有配置文件,这不是问题,但是如果已经有22 + 2的组合,则在将23 + 2更改为22 + 2时会产生错误。

数据:

EmID    ProID  
22       2  
23       2  
23       1   

在那种情况下,我将不得不删除23 + 2,但是将23 + 1更改为22 + 1。

结果应该是

22       1
22       2

这是我的目标。

我真的不知道该如何处理。

我不能以

delete from tblprofile 
where EmID = @duplicateEmID    

当我删除可用于保存个人资料的记录时...

谢谢你的帮助

迈克尔

您将通过多个简单步骤完成此操作。

1)运行查询以标识您要删除的Employee dupes(不是最旧的)。 将它们存储在临时表中。 还要在临时表中添加一个名为“ NewID”的列。

2)运行查询以更新临时表,并将NewID的值设置为该员工的最旧的emId。

3)运行查询以将NewID和ProfileID的组合插入到Profile表中,其中ProfileID当前与旧雇员ID一起存在,并且NewID和ProfileID的组合尚不存在。

4)从个人资料表中删除所有包含旧个人资料ID的行。

将复杂的问题分解为最基本的步骤通常可以轻松解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM