[英]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.