1

我意识到这是一个非常人为的示例,但我已将完整版本简化为以下说明问题的内容:

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 行
无法在视图“PracticeRepository.model.Appointments_Partition1”上创建聚集索引“IX_Appointments_Partition1_Id”,因为视图的选择列表包含聚合函数或分组列的结果表达式。考虑从选择列表中删除聚合函数或分组列的结果表达式。

我包括 count_big...那么为什么该组有问题?....我该如何解决该错误?

4

2 回答 2

5

这是应用了一些布尔逻辑的相同错误消息:

无法在视图“...”上创建聚集索引“...”,因为视图的选择列表包含分组列上的表达式。考虑从选择列表中删除分组列上的表达式。

你需要CONVERT删除CONVERT(varchar(15), AppointmentId)

于 2011-11-18T06:34:54.673 回答
-1

我在其中一个博客上找到了这个原因,对我来说似乎很合理

不,您不能在具有聚合的视图上使用模式绑定。除非您使用模式绑定,否则您无法索引视图。您也不能绑定使用外连接或左连接的索引。基本上,您只能绑定包含简单选择语句的视图。

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

您可以浏览该博客,看看它是否与您的场景完全匹配。

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

如果要在视图上建立索引,则必须使用模式绑定创建视图,在上面的链接中进行了详细说明。浏览设计注意事项部分

于 2011-11-18T05:20:08.003 回答