由于密钥错误,SQL Server插入错误
我得到了这个错误 违反主键约束“X_dbo.XYZ”。无法在对象中插入重复的键 我相信这不是由重复的钥匙引起的 我知道当您添加一行(在我的例子中是int)时,SQLServer正在使用一种“机制”来插入默认键 删除表中的所有行,然后尝试通过为id指定一个以前在该表中的值来添加行后,出现此错误 我相信这是由我不完全理解的“机制”造成的 例如,我在表XYZ中有一行由于密钥错误,SQL Server插入错误,sql,sql-server,Sql,Sql Server,我得到了这个错误 违反主键约束“X_dbo.XYZ”。无法在对象中插入重复的键 我相信这不是由重复的钥匙引起的 我知道当您添加一行(在我的例子中是int)时,SQLServer正在使用一种“机制”来插入默认键 删除表中的所有行,然后尝试通过为id指定一个以前在该表中的值来添加行后,出现此错误 我相信这是由我不完全理解的“机制”造成的 例如,我在表XYZ中有一行 Id Name 1 "some name" 我删除这一行,然后尝试添加一个Id为1的新行 INSERT ....
Id Name
1 "some name"
我删除这一行,然后尝试添加一个Id为1的新行
INSERT ....
VALUES (1, 'some other name for new row')
我得到了这个错误
在insert中不指定id对我来说不是一个选项,我需要解决此问题或此错误
谢谢
已更新
I表是使用实体框架和代码优先方法(C#)创建的
插入脚本如下所示
SET IDENTITY_INSERT [dbo].[XYZ] ON
GO
INSERT [dbo].[XYZ] ([ID], [Key], [Value], [Description], ...)
VALUES (1, N'PaymentMode', N'Test', N'PaymentMode', ...)
如果您将Id设置为“标识列”,请不要插入具有旧Id的行。
对于插入,您必须在“属性”选项卡的“表设计器”中,将“标识列”设置为“”。在表上设置了自动递增时,即使删除记录,表也不会重置要插入的下一行号。所以,如果您插入一行,将得到ID=1。如果删除该行并添加新行,即使1不再存在,该新行的ID也将为2。要重置该值,请使用以下命令
DBCC CHECKIDENT ([dbo].[XYZ], RESEED, 0)
显示CREATETABLE语句和insert语句。是否有一些触发器处于活动状态?您确定这不会从另一个表中删除吗?还显示Delete scriptDelete很简单,只是(从XYZ中删除*)没有其他我希望不删除该表的内容。如果有办法重新设置下一个身份证号码,那就太理想了。是的,这正是我想要的,非常感谢。
DBCC CHECKIDENT ([dbo].[XYZ], RESEED, 0)