Share via


設計和實作檢視

在建立檢視之前,請先仔細考慮下列指導方針:

  • 您只能在目前的資料庫中建立檢視。不過,新檢視所參考的資料表和檢視可以存在於其他資料庫或甚至是其他伺服器中,只要該檢視是使用分散式查詢來定義檢視即可。

  • 檢視名稱必須遵照識別碼規則,而且必須對每個結構描述而言都是唯一的。此外,該名稱絕不能與該結構描述中包含之任何資料表的名稱一樣。

  • 您可以在其他檢視上建立檢視。MicrosoftSQL Server 允許巢狀的檢視。但巢狀不可超過 32 層。視檢視的複雜度和可用的記憶體而定,檢視的巢狀實際限制有可能更少。

  • 您無法將規則或 DEFAULT 定義與檢視結合。

  • 您無法將 AFTER 觸發程序與檢視結合,只能用 INSTEAD OF 觸發程序。

  • 定義檢視的查詢不得包含 COMPUTE、COMPUTE BY 子句,或是 INTO 關鍵字。

  • 定義檢視的查詢不得包含 ORDER BY 子句,除非在 SELECT 陳述式的選取清單中含有 TOP 子句。

  • 定義檢視的查詢無法包含指定查詢提示的 OPTION 子句。

  • 定義檢視的查詢無法包含 TABLESAMPLE 子句。

  • 您無法在檢視上定義全文檢索索引定義。

  • 您無法建立暫時的檢視,也無法為暫存資料表建立檢視。

  • 除非卸除或變更檢視而使它不再具有結構描述繫結,否則無法卸除以 SCHEMABINDING 子句建立之檢視中所參與的檢視、資料表或函數。此外,如果這些陳述式影響到檢視的定義,則在已繫結結構描述之檢視的參與資料表上執行 ALTER TABLE 陳述式將會失敗。

  • 如果未以 SCHEMABINDING 子句來建立檢視,當影響檢視定義的檢視之下的物件有變更時,就應該執行 sp_refreshview。否則,在查詢檢視時,可能會產生非預期的結果。

  • 您無法對檢視進行全文檢索查詢,但如果查詢參考的資料表已設定全文檢索功能,則檢視定義中可包含全文檢索查詢。

  • 在下列情況下,您必須為檢視中的每個資料行指定名稱:

    • 檢視表中的任一資料行是衍生自算術運算式、內建函數或常數。

    • 否則檢視中的二或多個資料行會同名 (通常是因為檢視定義中包含聯結,而二或多個不同資料表中的資料行同名)。

    • 要讓檢視中任一資料行的名稱不同於衍生的資料行名稱。(您也可以將檢視中的資料行重新命名。) 檢視資料行會繼承其衍生來源資料行的資料類型,不論是否重新命名過。

      [!附註]

      當檢視是以包含外部聯結的查詢為基礎,就不適用這個規則,因為資料行可能會從不允許空值變成允許空值。

      否則,您不需要在建立檢視時指定資料行名稱。SQL Server 會將檢視的資料行指定為與定義檢視參考的查詢相同的名稱和資料類型。選取清單可以是基底資料表中資料行名稱之完整或部份清單。

若要建立檢視,您必須具有資料庫擁有者所授與的權限,而且如果檢視是以 SCHEMABINDING 子句所建立,則必須對檢視定義中參考的任何資料表或檢視具有適當的權限。

依預設,當透過檢視加入或更新資料列時,當資料列不再符合定義檢視的查詢之條件時,資料列就會從檢視的範圍消失。例如,可以建立一個查詢,以定義一個檢視來擷取資料表中員工的薪資少於 $30,000 元的所有資料列。如果員工的薪資增加到 $32,000,則查詢的檢視就不會再顯示該特定員工,因為其薪資已不符合檢視所設定的條件。不過,WITH CHECK OPTION 子句可強制對檢視執行的所有資料修改陳述式,能符合定義該檢視的 SELECT 陳述式中的條件集。如果使用此子句,就無法修改資料列讓它們從檢視中消失。修改的結果若可能造成這種現象,就會被取消,並顯示錯誤訊息。

若要建立資料檢視