SQL Server:无法在视图上创建索引,因为它引用了派生表。

时间:2016-08-10 00:32:47

标签: sql sql-server

如何将聚集索引添加到以下视图?

CREATE VIEW [vExcludedIds] 
WITH SCHEMABINDING 
AS 
    SELECT DISTINCT
        TempTable.Id 
    FROM
        (VALUES (1), (2), (3)) AS TempTable(Id) 

我的索引创建命令是:

CREATE UNIQUE CLUSTERED INDEX IDX_V1   
ON [vExcludedIds] (Id);

我收到以下错误:

  

无法在视图上创建索引" Test.dbo.vExcludedIds"因为它引用派生表" TempTable" (由FROM子句中的SELECT语句定义)。请考虑删除对派生表的引用或不对视图编制索引。

此外,当我尝试在SQL Server Management Studio中手动添加索引时,我在"新索引"的顶部出现错误。窗口说:

  

HasClusteredColumnStoreIndex:未知属性。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

请阅读https://msdn.microsoft.com/en-AU/library/ms191432.aspx

创建索引视图有很多限制。

... 视图定义中的SELECT语句不得包含以下Transact-SQL元素:

  • DISTINCT
  • 派生表

考虑创建表或表函数