0

当我尝试保存已经存在的记录时,有没有办法防止 sql 抛出错误。我有一个多对多关系的复合键表,它只有两个值,当我从我的应用程序更新模型时,它会尝试保存所有记录,已经存在的记录会抛出错误Cannot insert duplicate key 是否存在让数据库忽略这些的方式,还是我必须在应用程序中处理它?

4

3 回答 3

1

您可以尝试使用IGNORE_DUP_KEY选项创建索引,这样只有在您有重复键时才会收到警告,而不是真正的错误。

另一种可能更好的选择是使用MERGE语句而不是插入。MERGE 语句让您在一个语句中执行插入、更新和删除操作,听起来它应该很适合您尝试做的事情。

最后但同样重要的是,正如您所说,在您的应用程序中修复它并仅插入需要添加的行。

于 2013-05-02T17:06:44.487 回答
1

您正在调用INSERT并尝试添加重复的键。此错误是设计使然,并且必不可少。数据库正在为异常和错误的情况抛出异常。

相反,如果您尝试执行“upsert”,则可能需要使用存储过程或使用MERGE语法。

相反,如果您不想UPDATE只是忽略表中已经存在的行,那么您只需在INSERT语句中添加一个异常......例如

....
WHERE 
    table.Key <> interting.key
于 2013-05-02T17:00:16.400 回答
1

用你的插入语句尝试这样的事情。

insert into foo (x,y)
select @x,@y
except
select x,y from foo

这将向 foo 添加一条记录,仅当它尚未在表中时。

于 2013-05-02T17:00:28.320 回答