簡體   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