有沒有一種方法可以防止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. SQL服務器更新DATETIMEOFFSET複合鍵
- 5. SQL服務器的複合鍵問題
- 6. SQL服務器:重複主鍵錯誤
- 7. SQL服務器合併重複
- 8. Jooq - 忽略重複
- 9. 如何忽略重複使用鍵碼?
- 10. 忽略違反重複鍵索引
- 11. MySQL在忽略重複的非主鍵
- 12. 合併2個表忽略重複
- 13. 加載SQL並忽略重複項
- 14. SQL添加新列忽略重複
- 15. SQL Server排名 - 忽略重複行值
- 16. 忽略插入到選擇重複鍵錯誤(pl/sql)
- 17. SQL更新列並忽略重複的鍵錯誤
- 18. 如何忽略控制器重複值
- 19. 忽略重複計算
- 20. 忽略重複的行
- 21. SQL服務器:合併複製錯誤
- 22. 刪除重複行SQL服務器
- 23. SQL服務器查找重複
- 24. 阿爾特列是一個複合鍵-SQL服務器
- 25. DELETE SQL複合鍵
- 26. Apache服務器忽略.htaccess
- 27. 複合關鍵資源REST服務
- 28. cytoscape.js複合節點忽略佈局?
- 29. 如何忽略重複 「_id」 和MongoDB中
- 30. 忽略Foreach循環中的重複