2014-02-21 2 views
1

Учитывая видКолонка Игнорируется Создание уникального индекса

CREATE VIEW MyView WITH SCHEMABINDING AS 
SELECT A, B, Year, t1.FKId, C, D, COUNT_BIG(*) as Cnt, SUM(W) As Wgt 
FROM [dbo].[T1] t1 
INNER JOIN [dbo].T2 t2 ON t1.FKId = t2.Id 
INNER JOIN [dbo].T3 t3 ON t1.FKId = t3.FKId AND t1.FKId = t3.FKId 
GROUP BY A, B, Year, t1.FKId, C, D 

Когда я пытаюсь сделать что индексированного представление

CREATE UNIQUE CLUSTERED INDEX IX_CLU_My 
ON MyView (FKId, A, B, Year, C, D) 

SQL Server жалуется дубликат ключа, но сообщение об ошибке учитывает только 5 из 6 столбцов указаны:

Операция CREATE UNIQUE INDEX завершена, поскольку был найден дубликат ключа для имени объекта 'dbo .MyView 'и имя индекса' IX_CLU_My '. Значение повторяющегося ключа - (934, 1, 6, 2014, 1).

Фактические данные, содержащиеся в представлении, соответствующем первых 4-х ключей:

FKId A B Year C D 
934 1 6 2014 1 5 
934 1 6 2014 1 15 
934 1 6 2014 2 5 
934 1 6 2014 3 5 

Учитывая первые 5 столбцов, то сообщение об ошибке будет правильным. Почему 6-й столбец не рассматривается для уникальности?

+0

У вас осталось только 4 строки с вашего вида? –

+0

@ RickS: Нет, это те, которые относятся к этому конфликту. Всего в представлении всего несколько тысяч строк. –

ответ

1

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

SELECT A, B, Year, t1.FKId, C, D, COUNT_BIG(*) as Cnt 
FROM [dbo].[T1] t1 
INNER JOIN [dbo].T2 t2 ON t1.FKId = t2.Id 
INNER JOIN [dbo].T3 t3 ON t1.FKId = t3.FKId AND t1.FKId = t3.FKId 
GROUP BY A, B, Year, t1.FKId, C, D 
HAVING Count(*) > 1 
+0

Я выполнил этот запрос. Вот как я получил данные, показанные в вопросе. Он выполняется против задействованных таблиц, а не для представления. –

+0

Итак, запрос, предложенный Риком С, привел некоторые записи? Если да, то у вас определенно есть дубликаты записей, не так ли? – Ash8087

+0

Я не совсем понимаю, если OP на 100% уверен, что нет дубликатов на основе 6 столбцов. Я знаю, что сообщение об ошибке содержит только 5, но вы никогда не знаете о сообщениях об ошибках Microsoft и о том, что они на самом деле означают. –

Смежные вопросы