【问题标题】:Cannot create index on view 'View_Table_Name' because the view is not schema bound无法在视图“View_Table_Name”上创建索引,因为该视图未绑定架构
【发布时间】:2012-01-20 08:18:12
【问题描述】:

我在存储过程(SQL-Server)中使用视图。为了提高性能,我尝试创建该视图的 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

在这里我得到了类似的错误

消息 1939,第 16 级,状态 1,第 1 行 无法在视图“VW_FML”上创建索引,因为该视图未绑定架构。

我们可以在 SQL Server 中为视图创建索引吗?

【问题讨论】:

    标签: sql-server tsql view indexing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-19
        • 1970-01-01
        • 2019-08-23
        • 2014-08-05
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多