2016-04-12 52 views
-1

我收到此錯誤PRIMARY KEY約束 'X_dbo.XYZ' 的的SQL Server插入錯誤的原因的關鍵

衝突。不能在對象中插入重複鍵...

我確定它不是由重複鍵造成的!

我知道當你添加一行(在我的情況下是一個int)時,SQL Server正在使用「機制」來插入默認鍵。

當我刪除表中的所有行,然後嘗試通過爲id指定一個先前在該表中的值來添加行時,我得到此錯誤。

我相信這是由這個「機制」,我不完全理解

例如,我有表XYZ行

Id  Name 
1  "some name" 

我刪除這行,然後我嘗試添加引起的一個新的行作爲Id

INSERT .... 
VALUES (1, 'some other name for new row') 

我得到這個錯誤。

沒有在insert中指定id不是我的選擇,我需要一個解決方法或這個錯誤。

謝謝!

修訂

我表使用實體框架和代碼優先方法(C#)

[Table("XYZ")] 
public class XYZ: InheritDb 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long ID { get; set; } 
    [Required] 
    public string Key { get; set; } 
    [Required] 
    public string Value { get; set; } 

    public string Description { get; set; } 
    //.... 
} 

和插入腳本像

SET IDENTITY_INSERT [dbo].[XYZ] ON 
GO 

INSERT [dbo].[XYZ] ([ID], [Key], [Value], [Description], ...) 
VALUES (1, N'PaymentMode', N'Test', N'PaymentMode', ...) 
+4

向我們展示create table語句和insert語句。 – jarlh

+0

和任何觸發器 – MatBailie

+0

是否有一些觸發器有效?你確定這不是來自另一張桌子的com嗎? – Shnugo

回答

1

如果在表上設置了自動遞增設置,即使刪除了該記錄,該表也不會重置將要插入的下一行數。因此,如果插入1行,則ID = 1。如果刪除該行並添加新行,即使1不再存在,該新行也將爲ID = 2。爲了重置它,請使用以下命令:

DBCC CHECKIDENT ([dbo].[XYZ], RESEED, 0) 
+0

我希望不要刪除表。如果有辦法重置這個下一個ID號碼,這將是理想的。 – Catalin

+0

查看更新的回答 –

+0

是的,這正是我一直在尋找的,非常感謝。 – Catalin

0

如果設置ID創建是'標識列'你,請不要插入具有舊ID的行。 插入你必須在表設計器的屬性選項卡中設置'標識列'是''。