在SQL Server中,視圖是被存儲在數(shù)據(jù)庫中的預(yù)寫查詢。視圖是由一個SELECT語句,當(dāng)你運行視圖,會看到它的結(jié)果,就像打開一個表時一樣。 有些人喜歡把視圖稱作為虛擬表。這是因為,一個視圖可以拉動多個表,并匯總數(shù)據(jù)在一起并將其顯示,就好像它是一個單一的表。
當(dāng)有多個用戶提供不同級別的訪問權(quán)限,需要看到在數(shù)據(jù)庫中(但不一定是所有數(shù)據(jù))中的數(shù)據(jù)的各不同部分的視圖,可能是有用的。視圖可以執(zhí)行以下操作:
創(chuàng)建一個視圖通過使用CREATE VIEW語句,其次是SELECT語句。
CREATE VIEW ViewName AS SELECT ...
我們以前使用的查詢設(shè)計器創(chuàng)建兩個表中選擇數(shù)據(jù)的查詢?,F(xiàn)在讓我們在查詢并將其保存為一個名為“ToDoList”的視圖?;旧?,我們需要做的就是把CREATE VIEW ToDoList的AS查詢,像這樣的面前:
CREATE VIEW ToDoList AS SELECT Tasks.TaskName, Tasks.Description FROM Status INNER JOIN Tasks ON Status.StatusId = Tasks.StatusId WHERE (Status.StatusId = 1)
一旦運行該腳本,刷新瀏覽文件夾在左窗格中,你會看到視圖就在左窗格中:
所以,現(xiàn)在你已經(jīng)創(chuàng)建的視圖,你可以簡單地查看結(jié)果選擇它就像你會選擇任何表。而不是輸入出大SELECT語句的INNER JOIN等等,可以簡單地鍵入select* from todolist,它會運行完整的查詢:

注:也可以在視圖上單擊鼠標右鍵,并選擇 "Select Top 1000 Rows".
該視圖將返回最新的數(shù)據(jù)。如果表中的數(shù)據(jù)發(fā)生變化時,視圖的結(jié)果會改變過。所以,如果要添加新任務(wù)以及狀態(tài) "To Do", 下一次運行來看,這將包括在結(jié)果集中的新紀錄。
可以通過使用ALTER而不是CREATE修改現(xiàn)有的視圖。
因此,如果我們想要更改視圖使用StatusName字段,而不是StatusId,我們可以這樣做:
ALTER VIEW ToDoList AS SELECT Tasks.TaskName, Tasks.Description FROM Status INNER JOIN Tasks ON Status.StatusId = Tasks.StatusId WHERE (Status.StatusName = 'To Do')
注:使用查詢設(shè)計器也可以右鍵單擊視圖,然后選擇設(shè)計來修改您的視圖。
正如你所看到的,視圖讓您保存查詢,以便可以做一個SELECT,再次運行它也會比較簡單。但它們的確有其局限性。它們允許選擇數(shù)據(jù),但不允許執(zhí)行任何業(yè)務(wù)邏輯,如條件語句等。 要做到這一點需要一個存儲過程。