sql server,复合键 - 忽略重复

时间:2013-05-02 16:57:21

标签: sql sql-server composite-key

当我尝试保存已存在的记录时,有没有办法阻止sql抛出错误。我有一个多对多关系的复合键表,它只有两个值,当我从我的应用程序更新模型时,它会尝试保存所有记录,已存在的记录会抛出错误{{1有没有办法让数据库忽略这些,或者我是否必须在应用程序中处理它?<​​/ p>

3 个答案:

答案 0 :(得分:1)

您正在呼叫INSERT并尝试添加重复的密钥。此错误是设计上的,也是必不可少的。 DB正在针对特殊和错误的情况抛出异常。

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

相反,如果您不想UPDATE而只是忽略表中已有的行,那么您只需要在INSERT语句中添加一个例外...例如< / p>

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

答案 1 :(得分:1)

使用insert语句尝试这样的事情。

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

这将向foo添加一条记录,仅在表格中已有记录。

答案 2 :(得分:1)

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

另一种选择,可能更好的选择是使用MERGE语句而不是插入。 MERGE语句允许你在一个语句中进行插入,更新和删除操作,听起来它应该能够很好地完成你想要做的事情。

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

相关问题