我在存储过程(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吗?
答案 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可确保所有内容保持同步。