2011-12-14 36 views
40

我在我的存儲過程(SQL-Server)中使用視圖。爲了改善性能,我試圖創建該視圖的INDEX。無法在視圖'View_Table_Name'上創建索引,因爲該視圖不是模式綁定的

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中創建視圖索引嗎?

回答

60

對索引視圖有許多限制:沒有子查詢,沒有聯合,沒有外部聯接等。有關更多詳細信息,請參見this article。但對於你的情況,你只需要使用模式綁定來創建視圖。

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

因爲你正在試圖建立一個索引視圖物化視圖。如果您要在其上創建「集羣索引」,則必須提供「WITH SCHEMABINDING」選項。

視圖只不過是存儲的查詢,如果您要在其上創建索引,那麼索引將使用該查詢並在該表上執行該查詢,在這種情況下,您必須確保表格不會在下面改變。因此,通過執行這個約束,SQL Server可以確保所有內容都保持同步。

0

微軟,如果你在聽,這將是非常有用如果意見(使用其他意見與架構綁定)可以被索引創建物化視圖。這似乎是完全可能的。線索是錯誤信息的最後一個句子。

這是完全錯誤的文字:因爲它引用了另一個視圖「dbo.v_NH_GRM_SAP_bridge_key_1」 消息1937年,級別16,狀態1,2號線 無法在視圖中創建索引「TEST.dbo.v_NH_GRM_SAP_bridge」。 考慮在索引視圖定義中手動擴展引用視圖的定義。

相關問題