我意识到这是一个非常人为的例子,但我已将完整版简化为以下版本,以说明问题:
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]);
我明白了:
Msg 8668,Level 16,State 0,Line 12
无法在视图'PracticeRepository.model.Appointments_Partition1'上创建聚簇索引'IX_Appointments_Partition1_Id',因为视图的选择列表包含聚合函数或分组列结果的表达式。考虑从聚合函数的结果中删除表达式或从选择列表中分组列。
我要包括count_big ...那么为什么这个组出现了问题?....我该如何解决这个错误?
答案 0 :(得分:5)
以下是应用了一些布尔逻辑的相同错误消息:
无法在视图'...'上创建聚簇索引'...',因为 选择视图列表包含分组列上的表达式。 请考虑从选择列表中删除分组列上的表达式。
您需要移除CONVERT
CONVERT(varchar(15), AppointmentId)
答案 1 :(得分:-1)
我在其中一个博客上找到了这个理由,对我来说似乎很合理
不,您不能在具有聚合的视图上使用架构绑定。除非使用模式绑定,否则无法索引视图。您也无法绑定使用外连接或左连接的索引。基本上,您只能绑定包含简单select语句的视图。
http://www.tek-tips.com/viewthread.cfm?qid=1401646
您可以浏览博客,看看它是否与您的方案完全匹配。
http://technet.microsoft.com/en-us/library/cc917715.aspx
如果要在视图上构建索引,则必须使用模式绑定创建视图,在上面的链接中将对其进行详细说明。浏览设计注意事项部分