2012-06-04 6 views
2

Я пытаюсь настроить индексированное представление таблицы, которая не имеет уникального идентификатора. Он имеет два уникальных идентификатора, которые в сочетании были бы уникальными для его строки. У меня возникла проблема с созданием уникального кластеризованного индекса, который требуется индексируемому представлению, когда я нашел поток в MSDN, и все согласны с тем, что можно создать уникальный кластеризованный индекс из 2 столбцов для индексированного представления. @http://social.msdn.microsoft.com/Forums/en/transactsql/thread/f2c99845-3af1-46e8-9b52-363c24988744Уникальный кластеризованный индекс в двух столбцах для индексированного представления

Но для меня жизнь не может понять, как ее создать. Я катаюсь с этим запросом, но он, похоже, не сокращает его.

CREATE UNIQUE CLUSTERED INDEX [PK] ON MyView 
(
MyId1, MyId2 
) 

Ошибка:

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.MyView' and the index name 'PK'. The duplicate key value is (71cd9b68-1a9e-47bc-bc6b-0008b230a6d8, 0e64aa3a-0631-4caf-82d9-73609ee79b19).

Два идентификаторы, перечисленные в качестве дубликатов являются идентификаторы из MyId2.

Итак, как я могу создать уникальный кластерный индекс здесь?

+6

Это не дублируется только в этом столбце, это комбинация 'MyId1' и' MyId2', которая дублируется. – Lamak

+1

Запустите «выберите MyId1, MyId2 из группы MyView MyId1, MyId2 со счетом (*)> 1" , Это покажет вам ваши дубликаты, поскольку у вас может быть больше, чем показанная комбинация. SQL ошибочно, когда он столкнулся с исключением из уникальности, которую он ожидал в MyId1, MyId2. – Zhenny

+0

Почему бы не создать индекс непосредственно на столе? Зачем вам нужно представление? – Magnus

ответ

2

Ну сообщение об ошибке, кажется, предполагает, что существует более чем одна запись, где MyId1 = 71cd9b68-1a9e-47bc-bc6b-0008b230a6d8 и MyId2 = 0e64aa3a-0631-4caf-82d9-73609ee79b19.

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