java - 违反 PRIMARY KEY 约束 ***'。无法在对象错误中插入重复键
问题描述
当我尝试在表中插入一行时出现以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException:违反主键约束“PK_EM_SCHEDULER_POLLS”。无法在对象“dbo.EM_SCHEDULER_POLLS”中插入重复键。重复键值为 (109303)。
导致错误的函数如下:
public boolean setPollResults(int nSchedulerControllerPollId, Date dtExecuted, boolean blnSuccess)
{
try
{
PreparedStatement stmt = null;
String strSQL;
strSQL = "INSERT INTO EM_SCHEDULER_POLLS (SCHEDULER_CONTROLLER_POLL_ID ,DATE_TIME_EXECUTED ,POLLED_SUCCESSFULLY) VALUES (?,?,?)";
stmt = this.getConnection().getConnection().prepareStatement(strSQL);
stmt.setInt(1,nSchedulerControllerPollId);
stmt.setTimestamp(2, new Timestamp( dtExecuted.getTime()));
stmt.setBoolean(3,blnSuccess);
boolean blnValue = stmt.executeUpdate()!=0;
stmt.close();
return blnValue;
}
catch (Exception ex)
{
if (Logger.isErrorEnabled())
Logger.error(ex);
}
return false;
}
这是餐桌设计。如您所见,我没有尝试在 ID 列中插入标识类型的值。重复值109303已经在表中,但为什么会再次生成呢?
解决方案
似乎身份生成器已被重置。您可以尝试:
DBCC CHECKIDENT (table_name, RESEED, 0)
这会重置计数器,而不是0
将下一个值放在更大的 id 值之后。
编辑:如果您在
DBCC CHECKIDENT (table_name, RESEED)
没有第三个参数的情况下运行,数据库将自动重置身份计数器。
推荐阅读
- python - id 字段(例如 jupyter 笔记本中的“伤口过渡”)来自哪里,它是什么意思?
- macos - 请参阅原始粘贴数据 [MacOS]
- python - 如何将掩码纳入负似然损失 (torch.nn.functional.nll_loss)
- javascript - 猫头鹰旋转木马自由滑动移动
- django - Pinax 还在维护吗?
- excel - 编写一个 Excel 宏来查找和赋值,复制该值并粘贴到单元格中
- synchronization - 使用 rsync/rclone 进行增量数据传输
- javascript - 动态更新 react-native highchart
- python - 如何重定向到不同的站点,并使用 Django 传递身份验证凭据
- javascript - jQuery/Javascript 帮助:无法使用自动完成功能动态添加字段