程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SqlServer在視圖上創建索引的條件

SqlServer在視圖上創建索引的條件

編輯:關於SqlServer

在視圖上創建索引需要三個條件:
一、視圖必須綁定到架構。
要做到這點,在 CREATE VIEW 語句中,必須加上 WITH SCHEMABINDING,如果是使用企業管理器,則在設計界面的空白處點擊右鍵,屬性,選中“綁定到架構”。
二、索引必須是唯一索引。
要做到這點,在 CREATE INDEX 中必須指定 UNIQUE。
三、索引必須是聚集索引。
要做到這點,在 CREATE INDEX 中必須指定 CLUSTERED。
例:
CREATE VIEW viewFoo WITH SCHEMABINDING
AS
SELECT id...

CREATE UNIQUE CLUSTERED INDEX index_viewFoo ON viewFoo(id)

 

***************************************************************

視圖的要求
在視圖上創建聚集索引之前,該視圖必須滿足下列要求:  

當執行   CREATE   VIEW   語句時,ANSI_NULLS   和   QUOTED_IDENTIFIER   選項必須設置為   ON。OBJECTPROPERTY   函數通過   ExecIsAnsiNullsOn   或   ExecIsQuotedIdentOn   屬性為視圖報告此信息。  

為執行所有   CREATE   TABLE   語句以創建視圖引用的表,ANSI_NULLS   選項必須設置為   ON。  

視圖不能引用任何其它視圖,只能引用基表。  

視圖引用的所有基表必須與視圖位於同一個數據庫中,並且所有者也與視圖相同。  

必須使用   SCHEMABINDING   選項創建視圖。SCHEMABINDING   將視圖綁定到基礎基表的架構。  

必須已使用   SCHEMABINDING   選項創建了視圖中引用的用戶定義的函數。  

表和用戶定義的函數必須由   2   部分的名稱引用。不允許使用   1   部分、3   部分和   4   部分的名稱。  

視圖中的表達式所引用的所有函數必須是確定性的。OBJECTPROPERTY   函數的   IsDeterministic   屬性報告用戶定義的函數是否是確定性的。有關更多信息,請參見確定性函數和非確定性函數。  

視圖中的   SELECT   語句不能包含下列   Transact-SQL   語法元素:  
選擇列表不能使用   *   或   table_name.*   語法指定列。必須顯式給出列名。  

不能在多個視圖列中指定用作簡單表達式的表的列名。如果對列的所有(或只有一個例外)引用是復雜表達式的一部分或是函數的一個參數,則可多次引用該列。例如,下列選擇列表是非法的:  
SELECT   ColumnA,   ColumnB,   ColumnA


執行   CREATE   INDEX   語句的用戶必須是視圖的所有者。  
當執行   CREATE   INDEX   語句時,下列   SET   選項必須設置為   ON:  
ANSI_NULLS  
ANSI_PADDING  
ANSI_WARNINGS  
ARITHABORT  
CONCAT_NULL_YIELDS_NULL  
QUOTED_IDENTIFIERS  
必須將選項   NUMERIC_ROUNDABORT   選項設置為   OFF。  
視圖不能包含   text、ntext   或   image   列,即使在   CREATE   INDEX   語句中沒有引用它們。  
如果視圖定義中的   SELECT   語句指定了一個   GROUP   BY   子句,則唯一聚集索引的鍵只能引用在   GROUP   BY   子句中指定的列。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved