考虑这个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
我正在尝试在id,VisitDate上创建此视图的聚集索引。我收到以下错误。
无法创建聚簇索引'IX_ !!'在视图'CI_DB.dbo.MyView4'上 因为视图的选择列表包含结果的表达式 聚合函数或分组列 考虑删除聚合函数或结果的表达式 从选择列表中分组列。
答案 0 :(得分:1)
This is a known issue since 2006.
如果在索引视图中有聚合,并且应用于该字段的字段和表达式都在GROUP BY
中(我假设您刚刚从示例代码中删除),则引擎不允许你创建它。
有一些解决方法,但它们不是很简单。基本上你需要欺骗引擎认为字段不同。
答案 1 :(得分:0)
这是一个非常明确的错误消息,您的视图不是可以编入索引的视图。关于可以索引哪种观点,有很多条件。
答案 2 :(得分:0)
将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
好像你不能在函数和group by子句中指定像10这样的直接值。现在它可以工作!!