Не удалось создать индексированное представление - PullRequest
0 голосов
/ 11 октября 2011

рассмотрим это sql

CREATE VIEW [dbo].[MyView1] ([ID],[VisitDate],[StartDate] ,[EndDate],[MyCount])
WITH SCHEMABINDING  

AS
SELECT     id, VisitDate,dateadd(dd,-10,VisitDate),dateadd(dd,10,VisitDate),
count_BIG(*)as MyCount
FROM         dbo.Visits2
group by id,VisitDate

Я пытаюсь создать кластеризованный индекс для этого представления с идентификатором VisitDate.Я получаю следующую ошибку.

Невозможно создатькластерный индекс 'IX_ !!'в представлении 'CI_DB.dbo.MyView4', поскольку список выбора представления содержит выражение для результата статистической функции или столбца группировки.
Попробуйте удалить выражение для результата статистической функции или столбца группировки из списка выбора.

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Это известная проблема с 2006 года.

Если у вас есть агрегат в индексированном представлении, и поле и выражение, примененное к полю, находятся в GROUP BY(что, я полагаю, вы просто исключили из своего примера кода), движок не позволит вам его создать.

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

0 голосов
/ 12 октября 2011

Изменено значение sql на

    CREATE VIEW [dbo].[MyView2] ([ID],[VisitDate],[StartDate] ,[EndDate],[MyCount])
WITH SCHEMABINDING  

AS
SELECT     id, VisitDate,
dateadd(day,duration,VisitDate) startdate
,dateadd(day,duration,VisitDate) enddate,
count_BIG(*)as MyCount
FROM         dbo.Visits3
group by id,VisitDate,dateadd(day,duration,VisitDate),dateadd(day,duration,VisitDate)

GO

Похоже, вы не можете указать прямое значение, например 10, внутри функции и сгруппировать по выражению. Теперь это работает !!

0 голосов
/ 11 октября 2011

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

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