2014-03-05 72 views
0

我試圖運行下面的查詢:不能在對象中插入重複鍵行具有唯一索引

update OAR.oa_AcademicHead 
set personid=15857 
where personid=1234 

但我得到的錯誤:

Cannot insert duplicate key row in object 'OAR.oa_AcademicHead' with unique index 'IX_oa_AcademicHead_personid'. 
The statement has been terminated. 

可以做些什麼來解決這個問題??

+3

爲什麼在世界上,你會想改變行的主ID。是不是違反任何數據庫完整性原則? –

+0

也許你只是想刪除'1234'?我非常着迷於人們相互融合的想法。 –

回答

9

表中已存在personid15857的行。該列上的唯一索引阻止您提交具有相同personid的另一條記錄(更新實際上是刪除並插入)。

你必須首先運行查詢之前刪除現有的人與標識*

*免責聲明:確保這實際上是你想要做的是什麼;注意它可能導致的問題。

+0

給定表中的personid 15857只有一行,personid對於某個其他表的主鍵是外鍵,表的主鍵是academicheadid。爲什麼我們不能有兩行具有相同的人員ID。此外,我無法刪除該人員ID 1234,因爲他也是其他組織的學術人員。所以,如果我刪除1234的信息是AH狀態將會丟失。還有什麼可以解決它呢?謝謝。 – user3325454

+1

索引'IX_oa_AcademicHead_personid'被指定爲**唯一**索引,這意味着表中的每個personid都必須是唯一的;不能有重複。這是一個外鍵的「其他表」,聽起來像一個「人」表。實際上,兩個不同的學科負責人不可能是同一個人,因此是唯一的索引。在沒有看到整個數據庫模式的情況下,很難提出一個行動方案。 –

0

如果你得到所說的誤差,同時使用ASP.NET MVC做這樣的事情:

db.Entry(personObject).State = EntityState.Modified; 
db.Entry(personObject).Property(x => x.personid).IsModified = false; 
db.SaveChanges(); 
相關問題