Параметр 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