【发布时间】:2020-03-13 17:31:07
【问题描述】:
当我尝试在表中插入一行时出现以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException:违反PRIMARY 键约束“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 已经在表中,但为什么又会生成呢?
【问题讨论】:
-
听起来有人重新植入了
IDENTITY,因此尝试插入重复值。 -
nSchedulerControllerPollId不是这里的主键,@SergioArrighi。 -
@Larnu 有人重新播种了 IDENTITY 可能是真的,因为该表已使用应用程序与另一个表同步。如何检查当前身份?
-
使用
CHECKIDENT:Reporting the current identity value -
@Larnu 这确实是问题所在。 SELECT IDENT_CURRENT('EM_SCHEDULER_POLLS') 返回 109303
标签: java sql-server jdbc primary-key