在SQL Server 2008中,我有一个表tblProfile
,其中包含员工编号(EmID
)和profileID(ProID
)。 EmID+ProID
是组合的主键。
我在EmID
上找到了来自员工表的“重复”。每个员工可以有多个ProID
,但两个ID的组合都是唯一的。
当然,从EmID
一侧来看,它们并不重复,但在员工表中它们是重复的。
例如在tblEmployee
中有:
EmId Lastname Firstname Birthdate
------------------------------------------------
22 Mayer Frank 1960-01-01
23 Meyer Frank 1960-01-01
现在我想用这个逻辑“clean
”表。清除tblEmployee
不是问题,而是如何使用此逻辑清除tblProfile
?
我们假设我要删除EmID = 23
,因为我想保留旧记录。如果EmID = 23
的现有配置文件尚未定义为22,则不存在问题,但如果已经存在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
因为我删除了可能用来保存个人资料的记录....
谢谢你的帮助
迈克尔
答案 0 :(得分:1)
您将通过多个简单步骤完成此操作。
1)运行查询以识别要删除的员工欺骗(不是最旧的)。将它们存储在临时表中。还要添加一个名为" NewID"的列。在临时表中。
2)运行查询以更新临时表,并将NewID的值设置为该员工的最旧emId。
3)运行查询以将NewID和ProfileID的组合插入到Profile表中,其中ProfileID当前存在时具有旧员工ID,以及NewID&组合。 ProfileID尚不存在。
4)删除Profile表中包含旧profileID的所有行。
将一个复杂的问题分解为最基本的步骤通常可以轻松解决。