有没有一种方法可以防止SQL在我尝试保存已存在的记录时引发错误。我有一个多对多关系的复合关键表,只有两个值,当我从应用程序更新模型时,它试图保存所有记录,已存在的记录抛出错误Cannot insert duplicate key
是否存在一种让数据库忽略这些的方法,还是我必须在应用程序中处理它?SQL服务器,复合键 - 忽略重复
0
A
回答
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语句允许您在一个语句中插入,更新和删除所有语句,并且听起来像它应该适合您正在尝试执行的操作。
最后但并非最不重要的,正如您所说的修复它在您的应用程序,并只插入需要添加的行。
相关问题
- 1. 重复键忽略?
- 2. SQL忽略重复的主键
- 3. 忽略主键重复
- 4. 对重复键忽略ID
- 5. SQL服务器 - 复合键生成
- 6. SQL服务器的复合键问题
- 7. SQL服务器更新DATETIMEOFFSET复合键
- 8. SQL更新忽略重复
- 9. SQL服务器:重复主键错误
- 10. 复制SQL从一个服务器到另一个,并忽略重复
- 11. SQL服务器合并重复
- 12. Jooq - 忽略重复
- 13. MySQL的外键重复插入忽略
- 14. 忽略违反重复键索引
- 15. MySQL在忽略重复的非主键
- 16. 如何忽略重复使用键码?
- 17. INSERT与忽略重复但没有键
- 18. 合并2个表忽略重复
- 19. SQL Server排名 - 忽略重复行值
- 20. 加载SQL并忽略重复项
- 21. SQL添加新列忽略重复
- 22. 忽略插入到选择重复键错误(pl/sql)
- 23. SQL更新列并忽略重复的键错误
- 24. SQL复合键
- 25. SQL服务器:合并复制错误
- 26. SQL服务器 - 复合语句
- 27. 如何忽略控制器重复值
- 28. 忽略重复的行
- 29. 忽略重复计算
- 30. db.cloneCollection忽略重复密钥