2010-06-27 91 views

回答

8

那麼你可以從視圖中刪除,如果這是你問的,但你不能有一個視圖,刪除信息。該視圖是基礎表的一部分數據。如果您擁有權限,則可以在視圖中執行相同的數據操作,以便您可以直接對錶執行操作。

所以,你可以這樣做:

​​

When to use views
What is a view

+0

所以我們不能這樣寫 創建視圖MyView的 作爲 從EMP其中部門= 10 結束 我想是不是寫我說的對 – 2010-06-27 14:01:51

+1

@Surya刪除 - 不,你不能這樣做。我無法真正設想你爲什麼要這樣做。你會爲此使用一個存儲過程。 – 2010-06-27 14:11:49

+0

好吧,我明白先生凱文 – 2010-06-27 14:19:40

12

從這個MSDN文章:Modifying Data Through a View

  • 任何修改,包括UPDATE,INSERT和DELETE語句,必須僅引用來自一個基表的列。
  • 視圖中正在修改的列必須直接引用表列中的基礎數據。它們不能以任何其他方式派生,例如:

    • 集合函數(AVG,COUNT,SUM,MIN,MAX,GROUPING,STDEV,STDEVP,VAR和VARP)。
    • 計算;該列無法從使用其他列的表達式計算。使用集合運算符(UNION,UNION ALL,CROSSJOIN,EXCEPT和INTERSECT)形成的列相當於一個計算,並且也不可更新。
  • 被修改的列不受GROUP BY,HAVING或DISTINCT子句的影響。

  • 當指定WITH CHECK OPTION時,TOP不能在視圖的select_statement中的任何位置使用。

,並請參閱文章剩餘...

+0

謝謝你參考srinivas – 2010-06-27 14:02:30

+1

@Srini - 不只是說*「看到這篇文章」* - 至少提供一個簡短的描述,特別是如果你想讓人們upvote你的答案。 – slugster 2010-06-27 14:05:55

+0

@ slugster-謝謝,實際上我應該通過關於SO的常見問題。我現在正在做。 :) – 2010-06-27 14:14:58

1

除了允許在視圖本身有限的更新,你可以使用INSTEAD OF觸發器執行更積極參與改變。 INSTEAD OF基本上可以讓你攔截更新或刪除,並執行幾乎任何更改。參考文獻:MSDN Article

3

如果我下面

Create view table1_View 
as 
    select * 
    from table1 

go 

delete 
from table1_view 

我檢查和該命令從表1

+1

因爲它只來自於一個基表。按照MSDN的規定,只要它是從一個表中派生的,你就可以在視圖上進行插入,更新和刪除操作。 – Arbaaz 2015-12-02 18:04:32

0

刪除所有數據,答案就在如果視圖是一個可更新視圖或者非可更新視圖是什麼。

可更新視圖是包含基礎表中所有非空列的視圖。

如果是這樣,你在視圖上更新,刪除和插入查詢會影響底層真實表上的數據。

那就是.....

0

使用視圖更新數據 視圖可用於更新數據的查詢中,但受到一些限制。請記住,視圖不是一個表,也不包含任何數據 - 實際的修改始終發生在表級別。視圖不能用作覆蓋基表中定義的任何約束,規則或參照完整性的機制。

限制對通過視圖更新數據 你可以插入,更新,並在視圖中刪除行,受到以下限制:

如果視圖包含多個表之間的連接,你只能插入和更新一個表中,並且您不能刪除行。

您不能直接修改基於聯合查詢的視圖中的數據。您不能修改使用GROUP BY或DISTINCT語句的視圖中的數據。

所有正在修改的列都受到相同的限制,就像語句直接對基表執行一樣。

無法通過視圖修改文本和圖像列。

沒有查看標準的檢查。例如,如果視圖選擇所有居住在巴黎的客戶,並且修改了數據以添加或編輯沒有City ='Paris'的行,則數據將在基表中修改,但未在視圖中顯示,除非定義視圖時使用WITH CHECK OPTION。 欲瞭解更多信息,請檢查SRINIVAS回答這個Article

1

更多的解釋上的點..

任何修改,包括UPDATE,INSERT和DELETE語句,必須從只有一個基表中的列。

只要您可以管理基表結構,就可以使用INSTEAD OF的觸發器來解決此問題。 INSTEAD OF觸發器允許您覆蓋視圖上的INSERT,UPDATE或DELETE操作。例如,您可以在視圖上定義INSTEAD OF INSERT觸發器來替換標準的INSERT語句。

假設你創建了以下觀點:

CREATE VIEW AuthorsNames 

AS 

SELECT au_id, au_fname, au_lname 

FROM authors 

你可能想插入數據在視圖中不可見的列。爲此,在視圖上創建一個INSTEAD OF觸發器來處理插入。

CREATE TRIGGER ShowInsert on AuthorsNames 

INSTEAD OF INSERT 

AS 

BEGIN 

INSERT INTO authors 

    SELECT address, au_fname, au_id, au_lname, city, contract, phone, state, zip 

    FROM inserted 

END 

使用此方法,您可以插入到多個表中,但是如果您處理大量基礎表,這會變得更加複雜。 Ref MSDN

相關問題