无法在视图“View_Table_Name”上创build索引,因为该视图不是模式绑定的
我在我的存储过程(SQL-Server)中使用视图。 为了提高性能,我试图创build该视图的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
在这里,我得到了像这样的错误
Msg 1939,Level 16,State 1,Line 1无法在视图“VW_FML”上创build索引,因为该视图不是模式绑定的。
我们可以在SQL Server中创build视图索引吗?
对索引视图有许多限制:没有子查询,没有联合,没有外连接等。请参阅这篇文章了解更多细节。 但是对于你的情况,你只需要使用模式绑定来创build视图。
CREATE VIEW VW_Table_Name WITH SCHEMABINDING AS SELECT Col1,Col2,Col3 FROM Table_Name GO
因为您正在尝试创build索引视图或物化视图 。 如果您要在其上创build一个“集群索引”,则必须提供“WITH SCHEMABINDING”选项。
一个视图只不过是一个存储的查询,如果你要创build一个索引,然后索引将使用该查询并在该表上执行它,在这种情况下,你必须确保表不会改变下。 因此,通过强制实施这个约束,SQL Server可以确保一切都保持同步。
微软,如果你正在倾听,这将是非常有用的,如果视图( 使用其他视图WITH SCHEMA BINDING )可以索引创build物化视图。 这似乎是完全可能的。 线索是错误信息的最后一个句子。
这是完整的错误文本:消息1937年,级别16,状态1,行2无法在视图'TEST.dbo.v_NH_GRM_SAP_bridge'上创build索引,因为它引用另一个视图'dbo.v_NH_GRM_SAP_bridge_key_1'。 考虑在索引视图定义中手动扩展引用视图的定义。