2013-05-02 49 views
0

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

回答

1

您正在调用INSERT并尝试添加重复的密钥。这个错误是通过设计,并且是必不可少的数据库抛出一个例外情况,出现异常和错误的情况。

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

相反,如果你不想UPDATE但只是忽略行已经在表中,那么你需要简单的一个例外添加到您的INSERT声明...如

.... 
WHERE 
    table.Key <> interting.key 
1

尝试像这样的插入语句。

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

这会为foo添加一条记录,只要它不在表格中。

1

您可以尝试使用IGNORE_DUP_KEY选项创建索引,以便在重复键而不是真正错误时只发出警告。

另一种选择和可能更好的方法是使用MERGE语句而不是插入。 MERGE语句允许您在一个语句中插入,更新和删除所有语句,并且听起来像它应该适合您正在尝试执行的操作。

最后但并非最不重要的,正如您所说的修复它在您的应用程序,并只插入需要添加的行。