无法创建索引视图

时间:2011-10-11 19:46:00

标签: sql sql-server sql-server-2008

考虑这个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'上   因为视图的选择列表包含结果的表达式   聚合函数或分组列   考虑删除聚合函数或结果的表达式   从选择列表中分组列。

3 个答案:

答案 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这样的直接值。现在它可以工作!!