Определить, какая строка набора данных нарушает ограничение уникальности БД во время вставки - PullRequest
0 голосов
/ 13 января 2010

Я вставляю строки в таблицу из других таблиц в SQL Server Management Studio, и некоторые записи нарушают уникальное ограничение, поскольку исходные данные «грязные» и несовместимы.

Как я могу найти, какие записи нарушают?

Ответы [ 3 ]

0 голосов
/ 13 января 2010

Подумайте, что это за ключ, и попробуйте следующее:

1) Данные уже существуют:

выбрать поле источника из исходного кода где существует (выберите * из desttable, где destkeyfield = sourcekeyfield)

2) Дубликаты в источнике:

выберите поле исходного кода, количество () из исходной группы по полю исходного ключа, имеющему количество ()> 1

0 голосов
/ 21 мая 2012

Проверьте эту ссылку:

DataSet hell - "Не удалось включить ограничения. Одна или несколько строк содержат значения ...."

Санджай Шет утверждает там:

Решение заключается в методе GetErrors класса DataTable: http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataDataTableClassGetErrorsTopic.asp

По сути, когда я вижу сообщение выше, я проверяю HasErrors свойство для каждой DataTable в наборе данных, а затем вызвать Метод GetErrors для таблиц, сообщающих об ошибках. Возвращает GetErrors коллекция DataRows, и вы можете вызвать свойство .RowError на каждая из строк, пораженных ошибками, чтобы выяснить, что именно проблема в том.

и добавляет:

... отключить .EnableConstraints перед заполнением. Я обычно включаю ограничения снова, только после того, как оригинальное заполнение завершено. Затем, Вы можете перехватить указанное выше исключение и запустить обнаружение ошибок. функция, которая делает то, что я описал выше.

0 голосов
/ 13 января 2010

К сожалению, ваше единственное решение - проверить ограничение с помощью запроса по исходным данным, чтобы найти виновных. Если бы вы использовали что-то вроде SSIS, вы можете настроить его так, чтобы пропускать строки, нарушающие ограничение (я).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...