2012-05-20 34 views
4

任何人都可以在這裏告訴我VIEW和WITH的區別,因爲我已經搜索了很多地方,我找不到任何關於它的東西。
我的想法是,查看和使用是一樣的,除了看法保存爲一個Schema對象,但我可能是錯的SQL查看和WITH子句之間的區別

+0

[WITH CTE vs View]可能的重複(http://stackoverflow.com/questions/1224623/with-common-table-expression-vs-create-view-performance) –

回答

6

SQL視圖和子句非常相似。這裏有一些差異。

視圖在數據庫中創建一個實際對象,並具有關聯的元數據和安全功能。使用語句只是一個單一的查詢的一部分。

在很多數據庫中,視圖都有選項,例如索引它們或「實例化」它們。

使用語句提供了在某些數據庫中有遞歸CTE的機會。這是不可能的意見。

對於納入查詢的簡單子查詢,它們非常相似。這個選擇實際上取決於你是想創建一個可重用的代碼(視圖),還是關注於單個查詢(with)。

0

幾句話,WITH是在DML使用條款,VIEW是一個數據庫對象。查看定義可能包含使用WITH的查詢。你可以考慮WITH作爲派生表的是主DML定義,並且有指自身能力的變化(在微軟的術語)或內嵌視圖(在Oracle)(遞歸查詢)

WITH也在SQLServer的使用在不同的上下文中(查詢提示)。

3

基本上,視圖的定義保存在數據庫中,可以被任何查詢重用,而WITH子句(或公用表表達式或CTE)綁定到一個特定查詢並且只能通過複製重用。

否則,它們將基本相同。

如果使用遞歸WITH子句,那麼除非視圖定義本身使用WITH子句(這是合法的),否則無法在VIEW中實現相同的結果。

+0

謝謝。視圖的生命週期是無限期的,直到它被明確刪除,因爲它存儲在數據庫中? – Tim

+0

是;視圖定義存儲在系統目錄中,這與CTE不同,它對於單個查詢是私有的(儘管如果它認爲可以提供幫助,沒有什麼可以阻止系統保存CTE,但大多數情況下它可能沒有多大幫助,如果有的話)。 –