违反SQL中的主键错误

时间:2014-08-13 01:42:34

标签: c# asp.net sql-server-2008

我正在进行备份,点击备份按钮后,Teachers表中的数据将被插入bkTeachers表中。我在下面的表中使用了以下语句,但只有这个特定的Teachers表会导致此错误

  

违反PRIMARY KEY约束' PK_bkTeachers'。无法在对象' dbo.bkTeachers'。

中插入重复的密钥

代码:

da = new SqlDataAdapter("INSERT INTO bkTeachers(Teacher_Id, Teacher_Name, Password) Select Teacher_Id, Teacher_Name, Password FROM Teachers WHERE NOT EXISTS (SELECT 1 FROM dbo.bkTeachers  WHERE dbo.bkTeachers.Teacher_Id = dbo.Teachers.Teacher_Id AND bkTeachers.Teacher_Name = Teachers.Teacher_Name  AND bkTeachers.Password = Teachers.Password)", conn);
System.Data.DataSet ds2 = new System.Data.DataSet();
da.Fill(ds2);

2 个答案:

答案 0 :(得分:1)

INSERT INTO bkTeachers(Teacher_Id, Teacher_Name,Password) 
Select Teacher_Id, Teacher_Name,Password FROM Teachers t
WHERE NOT EXISTS (SELECT 1 FROM dbo.bkTeachers  bk
WHERE bk.Teacher_Id = t.Teacher_Id 
AND bk.Teacher_Name = t.Teacher_Name  
AND bk.Password = t.Password)

试试这个。请验证您的其他查询。如果仍然无法正常工作,请检查您的表格,看看它的主键是什么,可能是> 3

答案 1 :(得分:0)

您遇到此问题,因为备份表中已存在包含主键的条目。例如,假设Teacher_Id是表中的PK。第一次备份表时没有错误,但是第二次尝试备份Teacher_Id时,备份表中已经存在错误。这将抛出你所面临的错误。

如果您只对Teachers表的最新快照感兴趣,则可以在备份之前删除备份表,否则需要添加检查备份表中是否已存在您尝试备份的行