使用檢視的實例

檢視的功能一般是用來對焦 (Focus)、簡化和自訂每位使用者查看資料庫的角度。檢視也可以做為安全機制,讓使用者只可透過檢視來存取資料,而無法直接存取檢視的基底資料表。檢視可以用來提供回溯相容介面,以模擬已存在但其結構描述已變更的資料表。當您將資料複製到 Microsoft SQL Server 及從中複製資料,也可以使用檢視,來提高效能及分割資料時。

專注於特定資料

檢視可讓使用者專注於他們感興趣的特定資料,以及其所負責的特定作業。檢視中不會包含不需要或機密的資料。

例如,AdventureWorks2008R2 範例資料庫中的檢視 vBikes 可讓使用者看到目前庫存的所有腳踏車名稱。這個檢視會從 Product 資料表篩選出所有欄位 (但 Name 除外),且只會傳回已完成的腳踏車名稱,而非腳踏車元件。

CREATE VIEW vBikes AS
SELECT DISTINCT p.[Name] FROM Production.Product p
    JOIN Production.ProductInventory i ON p.ProductID = i.ProductID
    JOIN Production.ProductSubCategory ps 
        ON p.ProductSubcategoryID = ps.ProductSubCategoryID 
    JOIN Production.ProductCategory pc 
        ON (ps.ProductCategoryID = pc.ProductCategoryID 
            AND pc.Name = N'Bikes')
        AND i.Quantity > 0

簡化資料操作

檢視可以簡化使用者使用資料的方式。您可以將常用的聯結、規劃、UNION 查詢及 SELECT 查詢定義為檢視,讓使用者每次對該資料執行其他作業時,不需指定所有的條件及資格。例如,用來產生報表的複雜查詢,可能會執行子查詢、外部聯結,並從資料表群組中擷取資料以進行彙總,您就可以將這些複雜查詢建成檢視。檢視簡化了存取資料的方式,使用者不必每次產生報表時都要撰寫或提交基礎查詢,改為查詢檢視。如需操作資料的詳細資訊,請參閱<查詢基本原理>。

雖然不是複雜查詢,但是 AdventureWorks2008R2 範例資料庫中的檢視 vBikes 可讓使用者專注於特定資料,不必建構產生檢視所需的 JOIN 子句。

您也可以建立邏輯上會當作參數化檢視操作的內嵌使用者自訂函數,或是在 WHERE 子句搜尋條件或查詢之其他部分中具有參數的檢視。如需詳細資訊,請參閱<內嵌使用者定義函數>。

提供回溯相容性

檢視可讓您在資料表的結構描述變更時,為資料表建立回溯相容介面。例如,應用程式可能已參考具有下列結構描述的非正規化資料表:

Employee(Name, BirthDate, Salary, Department, BuildingName)

若要避免將資料重複儲存於資料庫中,您可以將資料表分割成下列這兩個資料表,以便將資料表正規化:

Employee2(Name, BirthDate, Salary, DeptId)

Department(DeptId, BuildingName)

若要提供仍會從 Employee 中參考資料的回溯相容介面,您可以卸除舊的 Employee 資料表,並使用下列檢視來取代:

CREATE VIEW Employee AS
SELECT Name, BirthDate, Salary, BuildingName
FROM Employee2 e, Department d
WHERE e.DeptId = d.DeptId

現在,用來查詢 Employee 資料表的應用程式可以從 Employee 檢視取得它們的資料。如果應用程式只是從 Employee 讀取資料,則不需要變更。有時,也可支援更新 Employee 的應用程式,方法為將 INSTEAD OF 觸發程序加入到新的檢視,以便將檢視上的 INSERT、DELETE 及 UPDATE 作業對應到基礎資料表。如需詳細資訊,請參閱<設計 INSTEAD OF 觸發程序>。

自訂資料

檢視可讓不同使用者利用不同的方式來查看資料,即使他們會同時使用相同的資料也一樣。當具有許多不同興趣及技巧層級的使用者共用相同資料庫時,這樣做更是特別有用。例如,您可以建立一個檢視,讓它只擷取某個業務經理負責的客戶資料。檢視就能根據使用檢視的業務經理登入識別碼來判斷應擷取哪些資料。

匯出/匯入資料

檢視可用來將資料匯出到其他應用程式。例如,您可能想使用 AdventureWorks2008R2 資料庫中的 CustomerSalesOrderHeader 資料表,利用 Microsoft Excel 來分析銷售資料。若要這樣做,您可以依據 CustomerSalesOrderHeader 資料表建立檢視。然後,使用 bcp 公用程式,匯出檢視所定義的資料。如果可以使用 INSERT 陳述式,將資料列插入檢視,也可以使用 bcp 公用程式或 BULK INSERT 陳述式,將資料檔中的資料匯入某些檢視。如需將資料複製到檢視之限制的詳細資訊,請參閱 INSERT (Transact-SQL)。如需有關如何使用 bcp 公用程式及 BULK INSERT 陳述式,將資料複製到檢視及從中複製資料的詳細資訊,請參閱<從檢視大量匯出資料或將資料大量匯入檢視>。

跨伺服器結合資料分割資料

可以在檢視中使用 Transact-SQL UNION 設定運算子,將來自個別資料表之兩個以上查詢的結果結合成單一結果集。使用者將會看到名為資料分割檢視的單一資料表。例如,如果有個資料表包含了華盛頓州的銷售資料,另一個則包含了加州的銷售資料,則可以根據那些資料表的 UNION 來建立檢視。檢視會呈現這兩個地區的銷售資料。

若要使用資料分割檢視,您可以建立數個相同資料表,指定一個條件約束,來判定可加入至每個資料表的資料範圍。接著,建立可以使用這些基底資料表的檢視。查詢檢視時,SQL Server 自動決定哪些資料表會受到查詢影響,且只會參考那些資料表。例如,如果查詢指定只需要華盛頓州的銷售資料,則 SQL Server 只會讀取包含華盛頓州銷售資料的資料表;不會存取其他資料表。

資料分割檢視可以根據多個異質性來源 (如遠端伺服器) 的資料,建立資料庫伺服器的聯盟。例如,若要合併來自不同遠端伺服器的資料,這些伺服器分別儲存某組織各地區的資料,您可以建立分散式查詢,分別擷取每個資料來源的資料,然後再根據這些分散式查詢建立檢視。任何查詢對該查詢所要求遠端伺服器上資料表中的資料只有唯讀模式;並無法存取檢視中別的分散式查詢中所參考的其他伺服器。

在多個伺服器上分割資料時,只存取一部分資料的查詢會因要掃描的資料比較少,因此執行得比較快。如果資料表位於不同的伺服器上,或是位於使用多個處理器的電腦上,則也會平行掃描查詢中所包括的每一個資料表。這可以提高查詢效能。此外,諸如重建索引或備份資料表等維護工作的執行速度也會比較快。

藉由使用資料分割檢視,資料仍會以單一資料表出現,而且不必以手動方式參考正確的基礎資料表就可進行查詢。

[!附註]

在伺服器本機分割資料的慣用方法是透過資料分割資料表。如需詳細資訊,請參閱<資料分割資料表及索引>。

如果符合下列任一條件,便可以更新資料分割檢視:

  • 檢視上定義一個 INSTEAD OF 觸發程序,邏輯上支援 INSERT、UPDATE 與 DELETE 陳述式。

  • 檢視與 INSERT、UPDATE 以及 DELETE 陳述式兩者皆遵循針對可更新的資料分割檢視而定義的規則。如需詳細資訊,請參閱<建立資料分割檢視>。