熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL入門:創建視圖

2013-11-15 14:32:35  來源: SQL Server 

  如視圖中所討論的視圖提供在一個或多個表中查看數據的替代方法通過創建視圖可以對想要各種用戶查看的信息進行限制下列圖表顯示視圖和表之間的關系
  
  圖 表和視圖之間的關系
   
  在圖 View_A 被限制僅存取 TABLE_A 的列 AC 和 AC View_AB 允許存取 TABLE_A 中的列 AC 和 TABLE_B 中的列 BC通過創建 View_A將用戶可以具有的存取權限制於 TABLE_A通過創建 VIEW_AB將存取權限制於某些列並創建查看數據的替代方式
  
  下列語句創建 STAFF 表 中 部門的非經理人員視圖其中薪水和傭金不通過基表顯示
  
   
   CREATE VIEW STAFF_ONLY
    AS SELECT ID NAME DEPT JOB YEARS
       FROM STAFF
       WHERE JOB <> Mgr AND DEPT=
  
  在創建視圖之後下列語句顯示視圖的內容
  
   SELECT *
    FROM STAFF_ONLY
  
  此語句產生下列結果
  
  早些時候我們把 STAFF 和 ORG 表連接起來產生一個列出每個部門名稱及其部門經理姓名的結果下列語句創建可重復用於相同目的的視圖
  
   
   CREATE VIEW DEPARTMENT_MGRS
    AS SELECT NAME DEPTNAME
       FROM STAFF ORG
       WHERE MANAGER = ID
  
  創建視圖時可以使用 WITH CHECK OPTION 子句將附加約束添加到通過視圖插入和更新表此子句導致數據庫管理程序驗證對視圖的任何更新或插入是否符合該視圖的定義並拒絕那些不符合定義的更新或插入如果省略此子句則不檢查違反視圖定義的插入和更新有關 WITH CHECK OPTION 如何起作用的詳情參考 SQL Reference 中的 CREATE VIEW 語句
  
  
  使用視圖來處理數據
  象 SELECT 語句一樣INSERTDELETE 以及 UPDATE 語句可以應用於視圖就好象視圖是一個實表一樣這些語句處理基本基表中的數據因此當再次存取該視圖時使用最新的基表對它進行計算如果未使用 WITH CHECK OPTION則使用視圖修改的數據可能由於不再滿足原始視圖定義而不在視圖的重復存取中出現
  
  下列是一個將更新應用於視圖 FIXED_INCOME 的示例
  
  FIXED_INCOME 的視圖定義
  
  
   CREATE VIEW FIXED_INCOME (LNAME DEPART JOBTITLE NEWSALARY)
    AS SELECT NAME DEPT JOB SALARY
       FROM PERS
       WHERE JOB <> Sales WITH CHECK OPTION
  
  
   UPDATE FIXED_INCOME
    SET NEWSALARY =
    WHERE LNAME = Li
  
  除了校驗選項以外先前視圖中的更新等效於對基表 PERS 的更新
  
   UPDATE PERS
    SET SALARY = SALARY *
    WHERE NAME = Li
     AND JOB <> Sales
  
  注意由於視圖是在 CREATE VIEW FIXED_INCOME 中對約束 JOB <> Sales使用 WITH CHECK OPTION 創建的所以當 Limoges 調去做銷售時不允許下列更新
  
   UPDATE FIXED_INCOME
    SET JOBTITLE = Sales
    WHERE LNAME = Limoges
  
  不能更新由表達式 SALARY + COMM or SALARY * 定義的列如果定義的視圖包含一列或多個這樣的列則擁有者不接受對這些列的更新(UPDATE)特權在包含這樣的列的視圖上不允許 INSERT 語句但允許 DELETE 語句
  
  考慮一個沒有一列定義為 NOT NULL 的 PERS 表可以通過 FIXED_INCOME 視圖將行插入 PERS 表中即使該視圖不包含基本表 PERS 的 IDYEARSCOMM 或 BIRTHDATE整個視圖中看不到的列被適當地設置為空值或缺省值
  
  然而PERS 表確實已將列 ID 定義為 NOT NULL如果嘗試通過 FIXED_INCOME 視圖插入行則系統試圖將空值插入在整個視圖中看不到的所有 PERS 列由於 ID 列未包括在視圖中並且該列不允許空值所以系統不允許通過該視圖進行插入
  
  有關修改視圖的規則和限制參考 SQL Reference 中的 CREATE VIEW 語句
  
  

From:http://tw.wingwit.com/Article/program/SQLServer/201311/21967.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.