违反主键约束***'。无法在对象错误中插入重复键

问题描述 投票:1回答:2

当我尝试在表中插入一行时出现以下错误:

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,但是为什么再次生成该值?

enter image description here

java sql-server jdbc primary-key
2个回答
-1
投票

似乎标识生成器已被重置。您可以尝试:

DBCC CHECKIDENT (table, RESEED, 0)

重置计数器,而不是0将下一个值放在更大的id值之后。


-2
投票

这是我面临的类似问题。尝试执行以下操作:enter image description here

右键单击表->设计->选择主键列。如果“身份”设置为“是,请将其更改为否。”>

© www.soinside.com 2019 - 2024. All rights reserved.