违反 PRIMARY KEY 约束“PK_EMPLOYEE”。无法在对象中插入重复键

Posted

技术标签:

【中文标题】违反 PRIMARY KEY 约束“PK_EMPLOYEE”。无法在对象中插入重复键【英文标题】:Violation of PRIMARY KEY constraint 'PK_EMPLOYEE'. Cannot insert duplicate key in object 【发布时间】:2019-02-05 11:30:05 【问题描述】:

我正在尝试更新记录,但它显示“违反主键约束,无法在对象/表中插入重复键”。 这个错误听起来像是在我更新记录时调用了“ADD EMPLOYEE block”。

如果我删除主键,它会插入另一条记录(更新)而不是更新前一条! 注意:已经阅读了很多问题来解决它!

static public void UpdateEmployee(Employee employee)

    String conString = ConfigurationManager.ConnectionStrings["EMPLOYES"].ConnectionString;

    SqlConnection conn = new SqlConnection(conString);
    using (conn)
    
        SqlCommand cmd = new SqlCommand("UpdateEmployeeRecord", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@EmployeeID", SqlDbType.NVarChar, 8).Value = employee.EmployeeID;
        cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar, 50).Value = employee.FirstName;
        cmd.Parameters.Add("@LastNmae", SqlDbType.NVarChar, 50).Value =     employee.LastName;
        cmd.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = employee.Email;
        cmd.Parameters.Add("@Telephone", SqlDbType.NVarChar, 50).Value = employee.Telephone;

        conn.Open();
        cmd.ExecuteNonQuery();
    


static public void AddEmployee(Employee employee)

    String conString = ConfigurationManager.ConnectionStrings["EMPLOYES"].ConnectionString;

    SqlConnection conn = new SqlConnection(conString);
    using (conn)
    
        SqlCommand cmd = new SqlCommand("AddNewEmployee", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@EmployeeID", SqlDbType.NVarChar, 8).Value = employee.EmployeeID;
        cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar, 50).Value = employee.FirstName;
        cmd.Parameters.Add("@LastNmae", SqlDbType.NVarChar, 50).Value = employee.LastName;
        cmd.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = employee.Email;
        cmd.Parameters.Add("@Telephone", SqlDbType.NVarChar, 50).Value = employee.Telephone;

        conn.Open();
        cmd.ExecuteNonQuery(); //(X) Exception is here
        
    

使用的程序

ALTER PROCEDURE [dbo].[UpdateEmployeeRecord]
(
    @EmployeeID NVARCHAR(8),@FirstName  NVARCHAR(50),
@LastNmae NVARCHAR(50),@Email NVARCHAR(50),
@Telephone Nvarchar(50)
)
AS
BEGIN
    UPDATE [DBO].[EMPLOYEE] SET  FirstName = @FirstName,
            LastName = @LastNmae, Email = @Email, Telephone = @Telephone
        WHERE EmployeeID = @EmployeeID 
    END 

我希望记录会被更新,但它违反了主键约束。

【问题讨论】:

听起来你的父代码调用了错误的方法。 不,它有效!但是如果有主键我无法更新记录,在删除主键时它会以另一条新记录的形式给我更新! 如果您只是从 SSMS 手动运行存储过程会发生什么? @spodger 在 ssms 中工作 那么请尝试调试您的代码并确保它调用了正确的方法,因为这听起来不正确。 【参考方案1】:

在过程中@LastNmae 是使用@LastName 的错误,但没有影响

【讨论】:

该参数可能拼写错误,但它是一致的,所以应该仍然有效。 你能用英语说吗? @FalcoGer 亲爱的参数拼写错误,但这不是问题

以上是关于违反 PRIMARY KEY 约束“PK_EMPLOYEE”。无法在对象中插入重复键的主要内容,如果未能解决你的问题,请参考以下文章

数据导入时违反 PRIMARY KEY 约束错误

交叉应用和外部应用一起使用时违反 PRIMARY KEY 约束

违反 PRIMARY KEY 约束“PK_Address”。等等......我做错了啥?

违反 PRIMARY KEY 约束“PK_EMPLOYEE”。无法在对象中插入重复键

使用实体框架添加记录时违反链接记录的PRIMARY KEY约束

(转)sql 违反了 PRIMARY KEY 约束,不能在对象 中插入重复键