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

Posted

技术标签:

【中文标题】SQL Server:无法在视图上创建索引,因为它引用派生表。【英文标题】:SQL Server : cannot create index on view because it references derived table. 【发布时间】:2016-08-10 00:32:46 【问题描述】:

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

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:未知属性。

有什么想法吗?

【问题讨论】:

这个视图的目的是什么?只需创建一个表。 我也有这个问题,但是可以用sql命令 【参考方案1】:

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

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

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

不同 派生表

考虑创建一个表或表函数

【讨论】:

链接指令出错,例如用户表申请职位。在表中,是应用程序的 user_id 和唯一 [id]。 SET ARITHABORT ON,在唯一索引 [id],[userid] 列上创建视图 SCHEMABOUND 视图返回,立即显示错误情况。即使在 SQL 2014 数据库中。参数有变化吗?在尝试使用索引创建模式绑定视图时,文章默认数据库中没有描述基本因素以始终显示错误?应用程序与 grails 很相似(很像实体框架)不知道为什么。

以上是关于SQL Server:无法在视图上创建索引,因为它引用派生表。的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中的架构绑定视图上创建索引

SQL Server在系统表sys.sysschobjs上创建索引[关闭]

SQL Server里面啥样的视图才能创建索引

索引视图中的 SQL Server ISDATE

索引视图以提高 SQL Server 上多个连接的性能

无法在视图上创建索引,因为视图未绑定架构 [重复]