在SQL Server 2005中,我使用SELECT
語句創建了一些視圖。我們可以在視圖中編寫UPDATE
和DELETE
聲明嗎?我們可以在視圖中編寫更新和刪除查詢嗎?
回答
那麼你可以從視圖中刪除,如果這是你問的,但你不能有一個視圖,刪除信息。該視圖是基礎表的一部分數據。如果您擁有權限,則可以在視圖中執行相同的數據操作,以便您可以直接對錶執行操作。
所以,你可以這樣做:
所以我們不能這樣寫 創建視圖MyView的 作爲 從EMP其中部門= 10 結束 我想是不是寫我說的對 – 2010-06-27 14:01:51
@Surya刪除 - 不,你不能這樣做。我無法真正設想你爲什麼要這樣做。你會爲此使用一個存儲過程。 – 2010-06-27 14:11:49
好吧,我明白先生凱文 – 2010-06-27 14:19:40
從這個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中的任何位置使用。
,並請參閱文章剩餘...
謝謝你參考srinivas – 2010-06-27 14:02:30
@Srini - 不只是說*「看到這篇文章」* - 至少提供一個簡短的描述,特別是如果你想讓人們upvote你的答案。 – slugster 2010-06-27 14:05:55
@ slugster-謝謝,實際上我應該通過關於SO的常見問題。我現在正在做。 :) – 2010-06-27 14:14:58
除了允許在視圖本身有限的更新,你可以使用INSTEAD OF
觸發器執行更積極參與改變。 INSTEAD OF
基本上可以讓你攔截更新或刪除,並執行幾乎任何更改。參考文獻:MSDN Article。
如果我下面
Create view table1_View
as
select *
from table1
go
delete
from table1_view
我檢查和該命令從表1
因爲它只來自於一個基表。按照MSDN的規定,只要它是從一個表中派生的,你就可以在視圖上進行插入,更新和刪除操作。 – Arbaaz 2015-12-02 18:04:32
刪除所有數據,答案就在如果視圖是一個可更新視圖或者非可更新視圖是什麼。
可更新視圖是包含基礎表中所有非空列的視圖。
如果是這樣,你在視圖上更新,刪除和插入查詢會影響底層真實表上的數據。
那就是.....
使用視圖更新數據 視圖可用於更新數據的查詢中,但受到一些限制。請記住,視圖不是一個表,也不包含任何數據 - 實際的修改始終發生在表級別。視圖不能用作覆蓋基表中定義的任何約束,規則或參照完整性的機制。
限制對通過視圖更新數據 你可以插入,更新,並在視圖中刪除行,受到以下限制:
如果視圖包含多個表之間的連接,你只能插入和更新一個表中,並且您不能刪除行。
您不能直接修改基於聯合查詢的視圖中的數據。您不能修改使用GROUP BY或DISTINCT語句的視圖中的數據。
所有正在修改的列都受到相同的限制,就像語句直接對基表執行一樣。
無法通過視圖修改文本和圖像列。
沒有查看標準的檢查。例如,如果視圖選擇所有居住在巴黎的客戶,並且修改了數據以添加或編輯沒有City ='Paris'的行,則數據將在基表中修改,但未在視圖中顯示,除非定義視圖時使用WITH CHECK OPTION。 欲瞭解更多信息,請檢查SRINIVAS回答這個Article
更多的解釋上的點..
任何修改,包括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
- 1. 我們可以在JPQL中編寫描述表查詢嗎?
- 2. 我們可以在刪除,刪除和截斷中回滾嗎?
- 3. 我們可以編寫子查詢在SELECT之間和FROM
- 4. 我們可以更新視圖中的真實數據嗎?
- 5. 如何在sql視圖上執行更新和刪除查詢?
- 6. 我們可以在代碼中硬編碼搜索查詢嗎?
- 7. 我們可以刪除/清除以前設置的標籤到視圖嗎?
- 8. 我們可以在聚合函數參數中編寫一個select查詢嗎?
- 9. 我們可以在NSFetchedRequestController中更改查詢嗎?
- 10. 我們可以刪除dom表嗎?
- 11. 我們可以刪除ES6課程嗎?
- 12. Linq新手。我可以寫這個Linq查詢更簡潔嗎?
- 13. 我們可以更改UITableView中刪除按鈕的原點嗎?
- 14. 我可以在插入查詢中寫入插入查詢嗎?
- 15. 我們可以向CppCheck添加/刪除編碼標準嗎?
- 16. 我可以在查詢中更新計算字段嗎
- 17. 我們可以在android視頻視圖中增加音量嗎?
- 18. 在Extjs商店我們可以查詢2列和2值嗎?
- 19. 我可以刪除彈出視圖中的箭頭嗎?
- 20. 我們可以在java中編寫代碼和sic彙編程序嗎?
- 21. 我們可以編寫AWS Lambda函數來查詢Kinesis Streams
- 22. 我們可以在oracle中刪除本地索引嗎?
- 23. 我們可以在Xcode中刪除許多列作爲UltraEdit嗎?
- 24. Zend_Db_Select更新/刪除查詢
- 25. Android-我們可以編程創建材質視圖嗎?
- 26. 我可以刪除flashlogs.txt嗎?
- 27. 我可以刪除xxxxxxxAreaRegistration.cs嗎?
- 28. 我可以使用mapreduce查詢CouchDB中的視圖嗎?
- 29. 在SQL中,我們是否可以始終將內部聯接語句編寫爲主查詢和子查詢?
- 30. 我們可以像查詢sql查詢數據集嗎?
不,您不能直接在VIEW定義中寫入DELETE,它必須是SELECT。 – slugster 2010-06-27 14:07:06