Опция IGNORE_DUP_KEY в SQL Server

Търсих доста в MSDN и Google, но изглежда, че описанието за опцията IGNORE_DUP_KEY е много ограничено.

Моите обърквания,

  1. Опцията IGNORE_DUP_KEY опция за колона ли е? за маса? за няколко колони? за индекс (правейки индекса уникален)?

  2. Ако зададете IGNORE_DUP_KEY на Да, когато вмъкнете партида от записи (чрез групово вмъкване на функцията WriteToServer ADO.Net) с дублиращи се ключове (например вмъквам някои стойности, които вече съществуват в базата данни), SQL Server няма да изведе грешка. Пакетното задание ще бъде завършено успешно, но дублираните редове няма да бъдат вмъкнати. Всички други редове ще бъдат вмъкнати и SQL Server ще ги третира като успешна работа. правилно ли съм разбрал?

благодаря предварително, Джордж


person George2    schedule 27.03.2009    source източник
comment
вижте коментара в отговора ми; Ефектът от тази опция за индексиране е да позволи всички уникални стойности да бъдат вмъкнати и да игнорира (с предупреждение) неуспешното прекъсване, защото е имало дубликат. Дубликатът не е вмъкнат. Ако вмъкнете дублиран файл, той пак няма да бъде включен в таблицата (вижте първия ми елемент от куршума)   -  person KM.    schedule 30.03.2009


Отговори (2)


IGNORE_DUP_KEY е опция на CREATE INDEX и засяга само вмъквания на множество редове:

IGNORE_DUP_KEY = ВКЛ

  • всички уникални редове се вмъкват, издава се предупреждение и дублиращите се редове не се вмъкват

IGNORE_DUP_KEY = ИЗКЛ

  • издава се грешка и не се вмъкват редове
person KM.    schedule 27.03.2009
comment
по подразбиране е IGNORE_DUP_KEY = OFF - person KM.; 27.03.2009
comment
@mike, не съм съгласен с -- засяга само вмъкванията на множество редове. Мисля, че дори да вмъкнете един ред (без масово вмъкване), опцията IGNORE_DUP_KEY все още има ефект. Някакви коментари? - person George2; 28.03.2009
comment
направо от моята онлайн помощ за CREATE INDEX (Transact-SQL): IGNORE_DUP_KEY = { ON | OFF } Указва отговора за грешка при дублиране на ключови стойности в операция за вмъкване на множество редове върху уникален клъстериран или уникален неклъстериран индекс. По подразбиране е ИЗКЛ. - person KM.; 30.03.2009

  1. IGNORE_DUP_KEY е за даден УНИКАЛЕН ИНДЕКС.

  2. „След анулирането всяка транзакция, която е била активна по това време, може да продължи, сякаш актуализацията или вмъкването никога не са се извършвали. Ключовете без дублиране се вмъкват нормално.“ Така че да, груповите вмъквания ще отчетат успех.

person Matt Rogish    schedule 27.03.2009
comment
@Matt, ако е зададено IGNORE_DUP_KEY = ON, всякакви начини да знам дали даден ред е вмъкнат или не (имам това притеснение, защото целта ми е да вмъквам само несъществуващи редове, а за съществуващи редове искам да запазя старата стойност, но получава някакви форми на обратна информация)? (продължение.) - person George2; 28.03.2009