Нарушение UNIQUE KEY Contstraints - Невозможно вставить дубликат ключа - PullRequest
6 голосов
/ 30 сентября 2010

Я вырываю свои волосы здесь.У меня есть таблица, которая имеет уникальный ключ (IX_tblTable) и уникальный ключ находится в столбце номер.Я анализирую некоторые данные из Интернета и храню их в таблице.Моя последняя коллекция данных из Интернета содержит номер , которых нет в базе данных .поэтому я получаю данные с сайта, и все данные, которые я получаю, уникальны, дубликатов нет, а числа в возвращаемом списке отсутствуют в базе данных.Я пытаюсь обновить базу данных, что является лучшим способом отловить ошибку, чтобы увидеть, какое число выдает ошибку.Я сохраняю все, что возвращается в список объектов, и когда он завершается, у меня есть 131 запись, которую нужно вставить, и я не вижу, какая из них выдает эту ошибку.Каков лучший способ перехватить его?

РЕДАКТИРОВАТЬ: я использую SQL Server 2005, Wirtting в C # и с использованием Linq2SQL.Я не могу опубликовать какой-либо код C # в настоящее время по частным причинам ...

Ответы [ 5 ]

3 голосов
/ 30 сентября 2010

Можете ли вы просто отключить ограничение на некоторое время и посмотреть, какие дубликаты сохраняются?Позже вы можете удалить дубликаты и снова включить их.

1 голос
/ 30 сентября 2010

Создайте копию таблицы без первичного ключа или ограничения уникальности (имея столбец, но не первичный). Измените свой код, чтобы вставить в эту таблицу. Запустить его. Выберите значения, имеющие более одного дубликата.

0 голосов
/ 01 октября 2010

Почему бы не использовать Begin Try ... End Try ... Begin Catch ... End Catch ... в процедуре хранения SQL (я предполагаю, что вы используете SP для вставки данных), чтобы захватить строку, которая вызывает ограничение уникальности нарушение?

0 голосов
/ 01 октября 2010

Контролируете ли вы жизненный цикл вашего текста данных?

Insert 5
SubmitChanges (record inserted, no exception)
Insert 5
SubmitChanges (duplicateKeyException on 5)
Insert 6
SubmitChanges (duplicateKeyException on 5)
0 голосов
/ 30 сентября 2010

Вы можете использовать алгоритм под названием двоичный поиск , чтобы найти «неправильные» данные.

Предположим, что у вас 131 строка INSERT INTO ... VALUES(...), и вы хотите отследить ту, которая вызывает ошибку, вы можете разделить свои 131 строку на две части (первые 66 и последние 65).Теперь запустите эти 66 и 65 INSERT отдельно и посмотрите, что выдает ошибку.Продолжайте «делить попытку», пока не дойдете до одной строки.(В худшем случае это 10 попыток).

...