2013-05-02 62 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語句允許您在一個語句中插入,更新和刪除所有語句,並且聽起來像它應該適合您正在嘗試執行的操作。

最後但並非最不重要的,正如您所說的修復它在您的應用程序,並只插入需要添加的行。