违反 PRIMARY KEY 约束 ***'。无法在对象错误中插入重复键
Violation of PRIMARY KEY constraint ***'. Cannot insert duplicate key in object error
当我尝试在 table 中插入一行时出现以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Violation of PRIMARY
KEY constraint 'PK_EM_SCHEDULER_POLLS'. Cannot insert duplicate key in
object 'dbo.EM_SCHEDULER_POLLS'. The duplicate key value is (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;
}
这是table的设计。如您所见,我并没有尝试将值插入身份类型的 ID 列中。重复值 109303 已经在 table 中了,但为什么又生成了这个值?
似乎身份生成器已被重置。您可以尝试:
DBCC CHECKIDENT (table_name, RESEED, 0)
重置计数器而不是 0
将下一个值放在更大的 id 值之后。
编辑:如果你 运行
DBCC CHECKIDENT (table_name, RESEED)
如果没有第三个参数,数据库会自动重置身份计数器。
当我尝试在 table 中插入一行时出现以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Violation of PRIMARY KEY constraint 'PK_EM_SCHEDULER_POLLS'. Cannot insert duplicate key in object 'dbo.EM_SCHEDULER_POLLS'. The duplicate key value is (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;
}
这是table的设计。如您所见,我并没有尝试将值插入身份类型的 ID 列中。重复值 109303 已经在 table 中了,但为什么又生成了这个值?
似乎身份生成器已被重置。您可以尝试:
DBCC CHECKIDENT (table_name, RESEED, 0)
重置计数器而不是 0
将下一个值放在更大的 id 值之后。
编辑:如果你 运行
DBCC CHECKIDENT (table_name, RESEED)
如果没有第三个参数,数据库会自动重置身份计数器。