Ошибка индексированного представления SQL Server - PullRequest
1 голос
/ 18 ноября 2011

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

CREATE VIEW model.Appointments_Partition1
WITH SCHEMABINDING AS
  SELECT CONVERT(varchar(15), AppointmentId) as Id, 
         ap.AppTypeId as AppointmentTypeId, 
         ap.Duration as DurationMinutes, 
         ap.AppointmentId as EncounterId, 
         COUNT_BIG(*) as __count_big
    FROM dbo.Appointments ap 
    JOIN dbo.PracticeCodeTable pct ON SUBSTRING(pct.Code, 1, 1) = ap.ScheduleStatus 
                                  AND pct.ReferenceType = 'AppointmentStatus' 
   WHERE ap.AppTime > 0
GROUP BY CONVERT(varchar(15), AppointmentId), ap.AppTypeId, ap.Duration, ap.AppointmentId

CREATE UNIQUE CLUSTERED INDEX [IX_Appointments_Partition1_Id]
ON model.Appointments_Partition1 ([Id]);

Я получаю:

Сообщение 8668, Уровень 16, Состояние 0, Строка 12
Невозможно создать кластеризованный индекс «IX_Appointments_Partition1_Id» для представления «PracticeRepository.model.Appointments_Partition1», так как список выбора представления содержит выражение для результата статистической функции или столбца группировки. Попробуйте удалить выражение из результата статистической функции или столбца группировки из списка выбора.

Я включаю count_big ... так почему группа связана с проблемой? .... и как я могу устранить ошибку?

Ответы [ 2 ]

5 голосов
/ 18 ноября 2011

Вот то же сообщение об ошибке, к которому применена логическая логика:

Невозможно создать кластерный индекс «...» при просмотре «...», поскольку список выбора представления содержит выражение в столбце группировки . Попробуйте удалить выражение из столбца группировки из списка выбора.

Вам необходимо удалить CONVERT в CONVERT(varchar(15), AppointmentId)

0 голосов
/ 18 ноября 2011

Я нахожу эту причину в одном из блогов, мне кажется разумным

Нет, вы не можете использовать привязку схемы к представлению с агрегатом. И вы не можете индексировать представление, если не используете привязку схемы. Вы также не можете привязать индекс, который использует внешние или левые соединения. По сути, вы можете связать только представление, содержащее простой оператор выбора.

http://www.tek -tips.com / viewthread.cfm? QID = 1401646

Вы можете просмотреть блог и посмотреть, точно ли он соответствует вашему сценарию.

http://technet.microsoft.com/en-us/library/cc917715.aspx

Если вы хотите построить индекс по представлениям, то вы должны создать представления с привязкой схемы, в приведенной выше ссылке это подробно объяснено. Перейдите в раздел «Вопросы дизайна»

...