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