有沒有一種方法可以防止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忽略重複密鑰