IGNORE_DUP_KEY = ON
基本上告訴SQL Server插入非重複的行,但默默地忽略任何重複;默認行爲是在列中存在不允許的列時出現重複錯誤並中止整個事務。你爲什麼不把IGNORE_DUP_KEY設置爲ON?
我已經處理了大量通常至少有一個重複的數據,所以當我知道一個值不應該有dups時,我喜歡使用UNIQUE
約束;然而,當我嘗試批量加載數據時,我想要的最後一件事是它完成了90%,然後突然遇到了一個複製,並且出錯了整個事情(是的,我知道明顯的解決方案是確保沒有重複,但有時我只是遞給一個填充數據的電子表格,並告訴儘快加載它)。
那麼,什麼是具有默認是OFF
,爲什麼不會你希望它是在所有的時間,使任何非DUP項成功,而你不用擔心的原因任何重複;無論如何,重複的機會都是錯誤的。
它是關係到性能,還是別的?這似乎是一個好主意,但是爲什麼它不是默認行爲呢?
主要是,有沒有很好的理由不是使用這個,我應該知道,或者它應該在逐案評估?
一個評論,設置忽略ON不是沒有後果。如果您有一個標識列,您會看到因重複而被忽略的每個插入標識的標識跳過。 – 2014-01-26 22:01:56
在非聚集索引上使用此選項會降低性能[使用IGNORE_DUP_KEY維護唯一索引](https://blogs.msdn.microsoft.com/craigfr/2008/01/30/maintaining-unique-indexes-with -ignore_dup_key /),並且可能導致嚴重的範圍鎖定,併發插入批處理[範圍鎖定(RS-U),由於IGNORE_DUP_KEY索引選項](http://aboutsqlserver.com/tag/locking/)。因此,當您想要在一個鏡頭中插入多行並忽略重複項時,只能將其應用於羣集鍵。 – eremmel 2016-11-04 16:22:35