我有一個表上的兩列主鍵。我試圖改變它與此命令設置的ignore_dup_key
到:我可以爲主鍵設置ignore_dup_key嗎?
ALTER INDEX PK_mypk on MyTable
SET (IGNORE_DUP_KEY = ON);
但我得到這個錯誤:
Cannot use index option ignore_dup_key to alter index 'PK_mypk' as it enforces a primary or unique constraint.
否則怎麼我應該設置IGNORE_DUP_KEY
上?
我的問題是這樣的:我需要每天插入大量的記錄,我目前正在爲每條記錄做插入命令。如果記錄已經存在,那麼它會被忽略(通過拋出一個重複的鍵錯誤)。從性能POV中,最好嘗試插入並允許一些插入失敗,而不是在插入之前檢查記錄是否存在。 提高性能的下一步是使用SqlBulkCopy爲每條記錄執行插入而不是單個命令。但是如果任何記錄存在,如果ignore_dup_key關閉,整個批次失敗,則這是不可能的。 – 2010-04-07 22:56:31
如果我的主鍵上的某一列是用戶定義的呢?如果我需要同時支持多個實體的插入,比如說1000?如何在插入之前驗證所有條目是唯一的,而不會對服務器產生嚴重影響?我認爲在這種情況下,忽略重複選項非常合適。你不同意嗎? – julealgon 2015-06-26 14:05:29
是的,如果你忽略了重複項,並且你不願意,你就不會主鍵;如果你是主鍵,那麼你最終會遇到一個帶有壞數據的世界。將數據放入臨時表中然後使用select語句只插入新記錄是一種更好的做法。我們以這種方式插入了百萬條記錄。 – HLGEM 2015-06-26 15:15:49