2016-09-02 2 views
1

Я хочу добавить уникальное ограничение для 1 int столбца существующей таблицы с примерно 1/2 миллиона строк или около того. Ive также видел упоминания об использовании отфильтрованного индекса. Однако нет ли проблем с созданием отфильтрованного индекса, если вы хотите позже (или уже иметь) внешние ключи, которые ссылаются на эти столбцы?Уникальное ограничение на таблицу с существующими данными

Могу ли я добавить уникальное ограничение, если некоторые из строк уже недействительны? Я хочу остановить дальнейшие вставки, если ограничение завершилось с ошибкой.

ALTER TABLE dbo.MyTable 
ADD CONSTRAINT UX_mycnstrtname UNIQUE([col1]) 

Фактически, приведенное выше не будет выполнено, если у меня уже есть записи, которые являются дубликатами в одном столбце.

Таким образом, с отфильтрованным индексом, например, так:

CREATE UNIQUE NONCLUSTERED INDEX [UX_1PerX] ON [dbo].[MyTable] 
(
    [TableID] ASC 
) 
WHERE (ID > 888876) 

Мой вопрос сейчас - это будет вызывать какие-либо проблемы, связанные с внешними ключами, которые ссылаются на эту колонку (TABLEID)?

+0

В чем вопрос? Если данные не уникальны, то уникальное ограничение не будет выполнено –

ответ

0

Неверные строки, которые означают, что у вас есть повторяющиеся записи правильно? вы попадете ниже ошибки:

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.myTable' and the index name 'UX_mytable_num'. The duplicate key value is (1). 

необходимо сделать их уникальными, создать уникальный индекс.