views:

1137

answers:

2

Hello everyone,

I did quite some search in MSDN and Google, but looks like the description for IGNORE_DUP_KEY option is very limited.

My confusions,

  1. Is IGNORE_DUP_KEY option an option for a column? for a table? for a couple of columns? for an index (making index unique)?

  2. If set IGNORE_DUP_KEY to Yes, when insert a batch of records (using bulk insert WriteToServer ADO.Net function) with duplicate keys (for example, I insert some values which already exist in database), SQL Server will not throw an error. The batch job will be completed successfully but the duplicated rows will not be inserted. All other rows will be inserted and SQL Server treat it as a job success. Is my understanding correct?

thanks in advance, George

+2  A: 
  1. IGNORE_DUP_KEY is for a given UNIQUE INDEX.

  2. "After the cancellation, any transaction that was active at the time may continue as though the update or insert had never taken place. Nonduplicate keys are inserted normally." So yes, bulk inserts will report success.

Matt Rogish
@Matt, if set IGNORE_DUP_KEY = ON, any ways to know whether a row is inserted or not (I have this concern because my purpose is to insert only non-existing rows, and for existing rows, I want to keep the old value but gets some forms of feedback information)? (continued.)
George2
I do not want SQL Server to eat all information. Any ideas?
George2
+3  A: 

IGNORE_DUP_KEY is an option of CREATE INDEX and only affects inserts of multiple rows:

IGNORE_DUP_KEY = ON

  • all unique rows get inserted, a warning is issued, and the duplicate rows are not inserted

IGNORE_DUP_KEY = OFF

  • an error is issued and no rows are inserted
KM
the default is IGNORE_DUP_KEY = OFF
KM
@mike, I do not agree with -- "only affects inserts of multiple rows". I think even insert a single row (non bulk-insert), IGNORE_DUP_KEY option still takes effects. Any comments?
George2
right from my online help for "CREATE INDEX (Transact-SQL)": IGNORE_DUP_KEY = { ON | OFF } Specifies the error response to duplicate key values in a multiple-row insert operation on a unique clustered or unique nonclustered index. The default is OFF.
KM