无法在视图'View_Table_Name'上创建索引,因为视图不是模式绑定的

时间:2011-12-14 14:52:44

标签: sql-server tsql view indexing

我在存储过程(SQL-Server)中使用了Views。为了提高性能,我尝试创建该视图的INDEX。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER VIEW VW_Table_Name
AS
SELECT Col1,Col2,Col3 FROM Table_Name 
GO
CREATE UNIQUE CLUSTERED INDEX Index_Name ON [VW_Table_Name](Col1)
GO

我在这里得到错误

  

Ms 1939,Level 16,State 1,Line 1   无法在视图'VW_FML'上创建索引,因为视图不是架构绑定。

我们可以在SQL Server中创建View for View吗?

2 个答案:

答案 0 :(得分:71)

索引视图有许多限制:没有子查询,没有联合,没有外连接等。有关详细信息,请参阅this article。但是对于您的情况,您只需要使用模式绑定创建视图。

CREATE VIEW VW_Table_Name WITH SCHEMABINDING
AS
SELECT Col1,Col2,Col3 FROM Table_Name 
GO

答案 1 :(得分:4)

因为您正在尝试创建索引视图实体化视图。如果要在其上创建聚集索引,则必须具有“WITH SCHEMABINDING”选项。

视图只是存储的查询,如果要在其上创建索引,那么索引将使用该查询并在该表上执行它,在这种情况下,您必须确保该表不会在下面改变。因此,通过强制执行此约束,SQL Server可确保所有内容保持同步。

相关问题