程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> T-SQL查詢進階:視圖詳解

T-SQL查詢進階:視圖詳解

編輯:關於SqlServer

簡介  

視圖可以看作定義在SQL Server上的虛擬表.視圖正如其名字的含義一樣,是另一種查看數據的入口.常規視圖本身並不存儲實際的數據,而僅僅存儲一個Select語句和所涉及表的metadata.

視圖簡單的理解如下:

通過視圖,客戶端不再需要知道底層table的表結構及其之間的關系。視圖提供了一個統一訪問數據的接口。

為什麼要使用視圖(View)

從而我們不難發現,使用視圖將會得到如下好處:

視圖隱藏了底層的表結構,簡化了數據訪問操作

因為隱藏了底層的表結構,所以大大加強了安全性,用戶只能看到視圖提供的數據

使用視圖,方便了權限管理,讓用戶對視圖有權限而不是對底層表有權限進一步加強了安全性

視圖提供了一個用戶訪問的接口,當底層表改變後,改變視圖的語句來進行適應,使已經建立在這個視圖上客戶端程序不受影響

視圖(View)的分類

視圖在SQL中可以分為三類

普通視圖(Regular View)

索引視圖(Indexed View)

分割視圖(Partitioned View)

下面從這幾種視圖類型來談視圖

普通視圖(Rugular View)

普通視圖由一個Select語句所定義,視圖僅僅包含其定義和被引用表的metadata.並不實際存儲數據。MSDN中創建視圖的模版如下:

CREATEVIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITHCHECKOPTION ] [ ; ]

<view_attribute> ::= 
{
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     } 

參數還是比較少的,現在解釋一下上面的參數:

ENCRYPTION:視圖是加密的,如果選上這個選項,則無法修改.創建視圖的時候需要將腳本保存,否則再也不能修改了

SCHEMABINDING:和底層引用到的表進行定義綁定。這個選項選上的話,則視圖所引用到的表不能隨便更改構架(比如列的數據類型),如果需要更改底層表構架,則先drop或者alter在底層表之上綁定的視圖.

VIEW_METADATA:這個是個很有意思的選項.正如這個選項的名稱所指示,如果不選擇,返回給客戶端的metadata是View所引用表的metadata,如果選擇了這個選項,則返回View的metadata.再通俗點解釋,VIEW_METADATA可以讓視圖看起來貌似表一樣。View的每一個列的定義等直接告訴客戶端,而不是所引用底層表列的定義。

WITH Check Option:這個選項用於更新數據做限制,下面會在通過視圖更新數據一節解釋.

當然了,創建視圖除了需要符合上面的語法規則之外,還有一些規則需要遵守:

在View中,除非有TOP關鍵字,否則不能用Order By子句(如果你一意孤行要用Order by,這裡有個hack是使用Top 100 percent…..)

View在每個Schema中命名必須獨一無二

View嵌套不能超過32層(其實實際工作中誰嵌套超過兩層就要被打PP了-.-)

Compute,compute by,INTO關鍵字不允許出現在View中

View不能建立在臨時表上

View不能對全文索引進行查詢

建立View一個簡單的例子:

CREATEVIEW v_Test_View1
ASSELECTTOP 100 * FROM HumanResources.Employee

視圖建立完成後,就可以像訪問表一樣訪問視圖了:

SELECT * FROM v_Test_View1

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