我收到此错误
违反PRIMARY KEY约束'X_dbo.XYZ'。无法在对象中插入重复键...
我确信它不是由重复的密钥引起的!
我知道SQL Server在添加行时使用“机制”来插入默认密钥(在我的例子中是一个int)。
删除表中的所有行后,我尝试通过为id指定以前在该表中的值来添加行,我得到此错误。
我认为这是由我不完全理解的“机制”造成的
例如我在表XYZ中有一行
Id Name
1 "some name"
我删除了这一行,然后尝试添加一个新的行,其中1为Id
INSERT ....
VALUES (1, 'some other name for new row')
我收到此错误。
不指定插入中的id不是我的选项,我需要解决这个问题或者这个错误。
谢谢!
已更新
我使用Entity Framework和代码优先方法(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', ...)
答案 0 :(得分:1)
如果在表上设置了自动递增,即使删除了记录,该表也不会重置要插入的下一行编号。因此,如果您插入1行,那么将获得ID = 1.如果删除该行并添加新行,则即使1不再存在,该新行也将是ID = 2。要重置它,请使用以下命令
DBCC CHECKIDENT ([dbo].[XYZ], RESEED, 0)
答案 1 :(得分:0)
如果您设置了ID '标识栏' ,则不要插入包含旧ID的行。 对于插入,您必须在“属性”选项卡的“表设计器”中设置'标识列' 是' '