Как применить ограничение уникального ключа для 2 столбцов в таблице, когда значения в таблице показывают ошибку - PullRequest
0 голосов
/ 10 ноября 2010
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found 
for the object name 'dbo.tblhm' and the index name 'New_id1'. The duplicate 
key value is (45560, 44200).

Я хочу знать, как работать с ограничением уникального ключа, объединяя 2 столбца. Так что значения, ранее сохраненные в базе данных, не в этом формате.это так, что вся работа может быть выполнена, и никакое значение столбца в базе данных не будет удалено

Ответы [ 3 ]

0 голосов
/ 10 ноября 2010

Предположим, что вы создаете уникальный индекс для столбцов: column1 и column2 в своей таблице dbo.tblhm

Это предполагает, что нет повторения любой комбинации значений column1, column2в любых строках таблицы dbo.tblhm

В соответствии с вашей ошибкой следующая комбинация (45560, 44200) значений для column1, column2 присутствует в более чем 1 строке и, следовательно, ограничение не выполняется.

Вам нужно сначала очистить данные с помощью оператора UPDATE, чтобы изменить значения column1 or column2 в строках, которые являются дубликатами, ДО того, как вы попытаетесь создать ограничение.

AFAIK, в Oracle у вас естьКлючевое слово "novalidate", которое можно использовать для достижения цели без очистки существующих данных.Но, по крайней мере, я не знаю ни одного способа добиться этого в SQL Server без предварительной очистки данных

0 голосов
/ 10 ноября 2010

Ошибка означает именно то, что говорится - существует более одной строки с одним и тем же ключом.

, т. Е. Для

CREATE UNIQUE INDEX New_id1 on dbo.tblhm(Column1, Column2)

существует более одной строки с одинаковыми значениями дляСтолбец1 и Столбец2

Так что либо

  • Ваши данные повреждены (например, вставка без проверки на наличие дубликатов) - вам нужно будет найти и объединить / удалить дублирующиеся ключи перед повторным созданием индекса
  • Или ваш индекс не может быть уникальным (например, есть веская причина, по которой с этим ключом может быть несколько строк, например, на бизнес-уровне).
0 голосов
/ 10 ноября 2010

Если я правильно понимаю вас, у вас есть дубликат ключа, который вы хотите игнорировать, но все же хотите применить уникальное ограничение в будущем? Я не думаю, что это возможно. Либо вам нужно удалить дублирующую строку (или обновить ее так, чтобы она не являлась дубликатом), переместить дублированные данные в таблицу архива без уникального индекса или добавить индекс в существующую таблицу без ограничения уникальности.

Я исправлюсь, но я не думаю, что есть другой способ обойти это.

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